GCC Code Coverage Report


Directory: ./
File: strings/ctype-utf8.cc
Date: 2022-12-13 11:44:05
Exec Total Coverage
Lines: 647 704 91.9%
Branches: 479 642 74.6%

Line Branch Exec Source
1 /* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
2
3 This library is free software; you can redistribute it and/or
4 modify it under the terms of the GNU Library General Public
5 License, version 2.0, as published by the Free Software Foundation.
6
7 This library is also distributed with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the library and your derivative works with the
12 separately licensed software that they have included with MySQL.
13
14 Without limiting anything contained in the foregoing, this file,
15 which is part of C Driver for MySQL (Connector/C), is also subject to the
16 Universal FOSS Exception, version 1.0, a copy of which can be found at
17 http://oss.oracle.com/licenses/universal-foss-exception.
18
19 This library is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 Library General Public License, version 2.0, for more details.
23
24 You should have received a copy of the GNU Library General Public
25 License along with this library; if not, write to the Free
26 Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
27 MA 02110-1301 USA */
28
29 // UTF-8, as defined in RFC 2279.
30
31 #include "my_config.h"
32
33 #include <assert.h>
34 #include <errno.h>
35 #include <string.h>
36 #include <sys/types.h>
37 #include <algorithm>
38 #include <type_traits>
39
40 #include "m_ctype.h"
41 #include "my_byteorder.h"
42 #include "my_compiler.h"
43
44 #include "my_inttypes.h"
45 #include "my_macros.h"
46 #include "my_uctype.h" // IWYU pragma: keep
47 #include "strings/mb_wc.h"
48
49 #define MY_UTF8MB4_GENERAL_CI MY_UTF8MB4 "_general_ci"
50 #define MY_UTF8MB4_BIN MY_UTF8MB4 "_bin"
51
52 using std::is_signed;
53
54
2/2
✓ Branch 0 taken 174485008 times.
✓ Branch 1 taken 8393038139 times.
8567523147 static inline int my_valid_mbcharlen_utf8mb3(const uchar *s, const uchar *e) {
55 my_wc_t wc; // Ignored.
56 8567523147 return my_mb_wc_utf8_prototype</*RANGE_CHECK=*/true, /*SUPPORT_MB4=*/false>(
57 8567523147 &wc, s, e);
58 }
59
60 static const MY_UNICASE_CHARACTER plane00[] = {
61 {0x0000, 0x0000, 0x0000}, {0x0001, 0x0001, 0x0001},
62 {0x0002, 0x0002, 0x0002}, {0x0003, 0x0003, 0x0003},
63 {0x0004, 0x0004, 0x0004}, {0x0005, 0x0005, 0x0005},
64 {0x0006, 0x0006, 0x0006}, {0x0007, 0x0007, 0x0007},
65 {0x0008, 0x0008, 0x0008}, {0x0009, 0x0009, 0x0009},
66 {0x000A, 0x000A, 0x000A}, {0x000B, 0x000B, 0x000B},
67 {0x000C, 0x000C, 0x000C}, {0x000D, 0x000D, 0x000D},
68 {0x000E, 0x000E, 0x000E}, {0x000F, 0x000F, 0x000F},
69 {0x0010, 0x0010, 0x0010}, {0x0011, 0x0011, 0x0011},
70 {0x0012, 0x0012, 0x0012}, {0x0013, 0x0013, 0x0013},
71 {0x0014, 0x0014, 0x0014}, {0x0015, 0x0015, 0x0015},
72 {0x0016, 0x0016, 0x0016}, {0x0017, 0x0017, 0x0017},
73 {0x0018, 0x0018, 0x0018}, {0x0019, 0x0019, 0x0019},
74 {0x001A, 0x001A, 0x001A}, {0x001B, 0x001B, 0x001B},
75 {0x001C, 0x001C, 0x001C}, {0x001D, 0x001D, 0x001D},
76 {0x001E, 0x001E, 0x001E}, {0x001F, 0x001F, 0x001F},
77 {0x0020, 0x0020, 0x0020}, {0x0021, 0x0021, 0x0021},
78 {0x0022, 0x0022, 0x0022}, {0x0023, 0x0023, 0x0023},
79 {0x0024, 0x0024, 0x0024}, {0x0025, 0x0025, 0x0025},
80 {0x0026, 0x0026, 0x0026}, {0x0027, 0x0027, 0x0027},
81 {0x0028, 0x0028, 0x0028}, {0x0029, 0x0029, 0x0029},
82 {0x002A, 0x002A, 0x002A}, {0x002B, 0x002B, 0x002B},
83 {0x002C, 0x002C, 0x002C}, {0x002D, 0x002D, 0x002D},
84 {0x002E, 0x002E, 0x002E}, {0x002F, 0x002F, 0x002F},
85 {0x0030, 0x0030, 0x0030}, {0x0031, 0x0031, 0x0031},
86 {0x0032, 0x0032, 0x0032}, {0x0033, 0x0033, 0x0033},
87 {0x0034, 0x0034, 0x0034}, {0x0035, 0x0035, 0x0035},
88 {0x0036, 0x0036, 0x0036}, {0x0037, 0x0037, 0x0037},
89 {0x0038, 0x0038, 0x0038}, {0x0039, 0x0039, 0x0039},
90 {0x003A, 0x003A, 0x003A}, {0x003B, 0x003B, 0x003B},
91 {0x003C, 0x003C, 0x003C}, {0x003D, 0x003D, 0x003D},
92 {0x003E, 0x003E, 0x003E}, {0x003F, 0x003F, 0x003F},
93 {0x0040, 0x0040, 0x0040}, {0x0041, 0x0061, 0x0041},
94 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
95 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
96 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
97 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049},
98 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
99 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
100 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
101 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
102 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
103 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
104 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
105 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
106 {0x005A, 0x007A, 0x005A}, {0x005B, 0x005B, 0x005B},
107 {0x005C, 0x005C, 0x005C}, {0x005D, 0x005D, 0x005D},
108 {0x005E, 0x005E, 0x005E}, {0x005F, 0x005F, 0x005F},
109 {0x0060, 0x0060, 0x0060}, {0x0041, 0x0061, 0x0041},
110 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
111 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
112 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
113 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049},
114 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
115 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
116 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
117 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
118 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
119 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
120 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
121 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
122 {0x005A, 0x007A, 0x005A}, {0x007B, 0x007B, 0x007B},
123 {0x007C, 0x007C, 0x007C}, {0x007D, 0x007D, 0x007D},
124 {0x007E, 0x007E, 0x007E}, {0x007F, 0x007F, 0x007F},
125 {0x0080, 0x0080, 0x0080}, {0x0081, 0x0081, 0x0081},
126 {0x0082, 0x0082, 0x0082}, {0x0083, 0x0083, 0x0083},
127 {0x0084, 0x0084, 0x0084}, {0x0085, 0x0085, 0x0085},
128 {0x0086, 0x0086, 0x0086}, {0x0087, 0x0087, 0x0087},
129 {0x0088, 0x0088, 0x0088}, {0x0089, 0x0089, 0x0089},
130 {0x008A, 0x008A, 0x008A}, {0x008B, 0x008B, 0x008B},
131 {0x008C, 0x008C, 0x008C}, {0x008D, 0x008D, 0x008D},
132 {0x008E, 0x008E, 0x008E}, {0x008F, 0x008F, 0x008F},
133 {0x0090, 0x0090, 0x0090}, {0x0091, 0x0091, 0x0091},
134 {0x0092, 0x0092, 0x0092}, {0x0093, 0x0093, 0x0093},
135 {0x0094, 0x0094, 0x0094}, {0x0095, 0x0095, 0x0095},
136 {0x0096, 0x0096, 0x0096}, {0x0097, 0x0097, 0x0097},
137 {0x0098, 0x0098, 0x0098}, {0x0099, 0x0099, 0x0099},
138 {0x009A, 0x009A, 0x009A}, {0x009B, 0x009B, 0x009B},
139 {0x009C, 0x009C, 0x009C}, {0x009D, 0x009D, 0x009D},
140 {0x009E, 0x009E, 0x009E}, {0x009F, 0x009F, 0x009F},
141 {0x00A0, 0x00A0, 0x00A0}, {0x00A1, 0x00A1, 0x00A1},
142 {0x00A2, 0x00A2, 0x00A2}, {0x00A3, 0x00A3, 0x00A3},
143 {0x00A4, 0x00A4, 0x00A4}, {0x00A5, 0x00A5, 0x00A5},
144 {0x00A6, 0x00A6, 0x00A6}, {0x00A7, 0x00A7, 0x00A7},
145 {0x00A8, 0x00A8, 0x00A8}, {0x00A9, 0x00A9, 0x00A9},
146 {0x00AA, 0x00AA, 0x00AA}, {0x00AB, 0x00AB, 0x00AB},
147 {0x00AC, 0x00AC, 0x00AC}, {0x00AD, 0x00AD, 0x00AD},
148 {0x00AE, 0x00AE, 0x00AE}, {0x00AF, 0x00AF, 0x00AF},
149 {0x00B0, 0x00B0, 0x00B0}, {0x00B1, 0x00B1, 0x00B1},
150 {0x00B2, 0x00B2, 0x00B2}, {0x00B3, 0x00B3, 0x00B3},
151 {0x00B4, 0x00B4, 0x00B4}, {0x039C, 0x00B5, 0x039C},
152 {0x00B6, 0x00B6, 0x00B6}, {0x00B7, 0x00B7, 0x00B7},
153 {0x00B8, 0x00B8, 0x00B8}, {0x00B9, 0x00B9, 0x00B9},
154 {0x00BA, 0x00BA, 0x00BA}, {0x00BB, 0x00BB, 0x00BB},
155 {0x00BC, 0x00BC, 0x00BC}, {0x00BD, 0x00BD, 0x00BD},
156 {0x00BE, 0x00BE, 0x00BE}, {0x00BF, 0x00BF, 0x00BF},
157 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
158 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
159 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
160 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
161 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
162 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
163 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
164 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
165 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
166 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
167 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
168 {0x00D6, 0x00F6, 0x004F}, {0x00D7, 0x00D7, 0x00D7},
169 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
170 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
171 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
172 {0x00DE, 0x00FE, 0x00DE}, {0x00DF, 0x00DF, 0x0053},
173 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
174 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
175 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
176 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
177 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
178 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
179 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
180 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
181 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
182 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
183 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
184 {0x00D6, 0x00F6, 0x004F}, {0x00F7, 0x00F7, 0x00F7},
185 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
186 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
187 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
188 {0x00DE, 0x00FE, 0x00DE}, {0x0178, 0x00FF, 0x0059}};
189
190 /*
191 Almost similar to plane00, but maps sorting order
192 for U+00DF to 0x00DF instead of 0x0053.
193 */
194 static const MY_UNICASE_CHARACTER plane00_mysql500[] = {
195 {0x0000, 0x0000, 0x0000}, {0x0001, 0x0001, 0x0001},
196 {0x0002, 0x0002, 0x0002}, {0x0003, 0x0003, 0x0003},
197 {0x0004, 0x0004, 0x0004}, {0x0005, 0x0005, 0x0005},
198 {0x0006, 0x0006, 0x0006}, {0x0007, 0x0007, 0x0007},
199 {0x0008, 0x0008, 0x0008}, {0x0009, 0x0009, 0x0009},
200 {0x000A, 0x000A, 0x000A}, {0x000B, 0x000B, 0x000B},
201 {0x000C, 0x000C, 0x000C}, {0x000D, 0x000D, 0x000D},
202 {0x000E, 0x000E, 0x000E}, {0x000F, 0x000F, 0x000F},
203 {0x0010, 0x0010, 0x0010}, {0x0011, 0x0011, 0x0011},
204 {0x0012, 0x0012, 0x0012}, {0x0013, 0x0013, 0x0013},
205 {0x0014, 0x0014, 0x0014}, {0x0015, 0x0015, 0x0015},
206 {0x0016, 0x0016, 0x0016}, {0x0017, 0x0017, 0x0017},
207 {0x0018, 0x0018, 0x0018}, {0x0019, 0x0019, 0x0019},
208 {0x001A, 0x001A, 0x001A}, {0x001B, 0x001B, 0x001B},
209 {0x001C, 0x001C, 0x001C}, {0x001D, 0x001D, 0x001D},
210 {0x001E, 0x001E, 0x001E}, {0x001F, 0x001F, 0x001F},
211 {0x0020, 0x0020, 0x0020}, {0x0021, 0x0021, 0x0021},
212 {0x0022, 0x0022, 0x0022}, {0x0023, 0x0023, 0x0023},
213 {0x0024, 0x0024, 0x0024}, {0x0025, 0x0025, 0x0025},
214 {0x0026, 0x0026, 0x0026}, {0x0027, 0x0027, 0x0027},
215 {0x0028, 0x0028, 0x0028}, {0x0029, 0x0029, 0x0029},
216 {0x002A, 0x002A, 0x002A}, {0x002B, 0x002B, 0x002B},
217 {0x002C, 0x002C, 0x002C}, {0x002D, 0x002D, 0x002D},
218 {0x002E, 0x002E, 0x002E}, {0x002F, 0x002F, 0x002F},
219 {0x0030, 0x0030, 0x0030}, {0x0031, 0x0031, 0x0031},
220 {0x0032, 0x0032, 0x0032}, {0x0033, 0x0033, 0x0033},
221 {0x0034, 0x0034, 0x0034}, {0x0035, 0x0035, 0x0035},
222 {0x0036, 0x0036, 0x0036}, {0x0037, 0x0037, 0x0037},
223 {0x0038, 0x0038, 0x0038}, {0x0039, 0x0039, 0x0039},
224 {0x003A, 0x003A, 0x003A}, {0x003B, 0x003B, 0x003B},
225 {0x003C, 0x003C, 0x003C}, {0x003D, 0x003D, 0x003D},
226 {0x003E, 0x003E, 0x003E}, {0x003F, 0x003F, 0x003F},
227 {0x0040, 0x0040, 0x0040}, {0x0041, 0x0061, 0x0041},
228 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
229 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
230 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
231 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049},
232 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
233 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
234 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
235 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
236 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
237 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
238 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
239 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
240 {0x005A, 0x007A, 0x005A}, {0x005B, 0x005B, 0x005B},
241 {0x005C, 0x005C, 0x005C}, {0x005D, 0x005D, 0x005D},
242 {0x005E, 0x005E, 0x005E}, {0x005F, 0x005F, 0x005F},
243 {0x0060, 0x0060, 0x0060}, {0x0041, 0x0061, 0x0041},
244 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
245 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
246 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
247 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049},
248 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
249 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
250 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
251 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
252 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
253 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
254 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
255 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
256 {0x005A, 0x007A, 0x005A}, {0x007B, 0x007B, 0x007B},
257 {0x007C, 0x007C, 0x007C}, {0x007D, 0x007D, 0x007D},
258 {0x007E, 0x007E, 0x007E}, {0x007F, 0x007F, 0x007F},
259 {0x0080, 0x0080, 0x0080}, {0x0081, 0x0081, 0x0081},
260 {0x0082, 0x0082, 0x0082}, {0x0083, 0x0083, 0x0083},
261 {0x0084, 0x0084, 0x0084}, {0x0085, 0x0085, 0x0085},
262 {0x0086, 0x0086, 0x0086}, {0x0087, 0x0087, 0x0087},
263 {0x0088, 0x0088, 0x0088}, {0x0089, 0x0089, 0x0089},
264 {0x008A, 0x008A, 0x008A}, {0x008B, 0x008B, 0x008B},
265 {0x008C, 0x008C, 0x008C}, {0x008D, 0x008D, 0x008D},
266 {0x008E, 0x008E, 0x008E}, {0x008F, 0x008F, 0x008F},
267 {0x0090, 0x0090, 0x0090}, {0x0091, 0x0091, 0x0091},
268 {0x0092, 0x0092, 0x0092}, {0x0093, 0x0093, 0x0093},
269 {0x0094, 0x0094, 0x0094}, {0x0095, 0x0095, 0x0095},
270 {0x0096, 0x0096, 0x0096}, {0x0097, 0x0097, 0x0097},
271 {0x0098, 0x0098, 0x0098}, {0x0099, 0x0099, 0x0099},
272 {0x009A, 0x009A, 0x009A}, {0x009B, 0x009B, 0x009B},
273 {0x009C, 0x009C, 0x009C}, {0x009D, 0x009D, 0x009D},
274 {0x009E, 0x009E, 0x009E}, {0x009F, 0x009F, 0x009F},
275 {0x00A0, 0x00A0, 0x00A0}, {0x00A1, 0x00A1, 0x00A1},
276 {0x00A2, 0x00A2, 0x00A2}, {0x00A3, 0x00A3, 0x00A3},
277 {0x00A4, 0x00A4, 0x00A4}, {0x00A5, 0x00A5, 0x00A5},
278 {0x00A6, 0x00A6, 0x00A6}, {0x00A7, 0x00A7, 0x00A7},
279 {0x00A8, 0x00A8, 0x00A8}, {0x00A9, 0x00A9, 0x00A9},
280 {0x00AA, 0x00AA, 0x00AA}, {0x00AB, 0x00AB, 0x00AB},
281 {0x00AC, 0x00AC, 0x00AC}, {0x00AD, 0x00AD, 0x00AD},
282 {0x00AE, 0x00AE, 0x00AE}, {0x00AF, 0x00AF, 0x00AF},
283 {0x00B0, 0x00B0, 0x00B0}, {0x00B1, 0x00B1, 0x00B1},
284 {0x00B2, 0x00B2, 0x00B2}, {0x00B3, 0x00B3, 0x00B3},
285 {0x00B4, 0x00B4, 0x00B4}, {0x039C, 0x00B5, 0x039C},
286 {0x00B6, 0x00B6, 0x00B6}, {0x00B7, 0x00B7, 0x00B7},
287 {0x00B8, 0x00B8, 0x00B8}, {0x00B9, 0x00B9, 0x00B9},
288 {0x00BA, 0x00BA, 0x00BA}, {0x00BB, 0x00BB, 0x00BB},
289 {0x00BC, 0x00BC, 0x00BC}, {0x00BD, 0x00BD, 0x00BD},
290 {0x00BE, 0x00BE, 0x00BE}, {0x00BF, 0x00BF, 0x00BF},
291 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
292 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
293 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
294 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
295 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
296 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
297 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
298 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
299 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
300 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
301 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
302 {0x00D6, 0x00F6, 0x004F}, {0x00D7, 0x00D7, 0x00D7},
303 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
304 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
305 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
306 {0x00DE, 0x00FE, 0x00DE}, {0x00DF, 0x00DF, 0x00DF},
307 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
308 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
309 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
310 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
311 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
312 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
313 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
314 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
315 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
316 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
317 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
318 {0x00D6, 0x00F6, 0x004F}, {0x00F7, 0x00F7, 0x00F7},
319 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
320 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
321 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
322 {0x00DE, 0x00FE, 0x00DE}, {0x0178, 0x00FF, 0x0059}};
323
324 static const MY_UNICASE_CHARACTER plane01[] = {
325 {0x0100, 0x0101, 0x0041}, {0x0100, 0x0101, 0x0041},
326 {0x0102, 0x0103, 0x0041}, {0x0102, 0x0103, 0x0041},
327 {0x0104, 0x0105, 0x0041}, {0x0104, 0x0105, 0x0041},
328 {0x0106, 0x0107, 0x0043}, {0x0106, 0x0107, 0x0043},
329 {0x0108, 0x0109, 0x0043}, {0x0108, 0x0109, 0x0043},
330 {0x010A, 0x010B, 0x0043}, {0x010A, 0x010B, 0x0043},
331 {0x010C, 0x010D, 0x0043}, {0x010C, 0x010D, 0x0043},
332 {0x010E, 0x010F, 0x0044}, {0x010E, 0x010F, 0x0044},
333 {0x0110, 0x0111, 0x0110}, {0x0110, 0x0111, 0x0110},
334 {0x0112, 0x0113, 0x0045}, {0x0112, 0x0113, 0x0045},
335 {0x0114, 0x0115, 0x0045}, {0x0114, 0x0115, 0x0045},
336 {0x0116, 0x0117, 0x0045}, {0x0116, 0x0117, 0x0045},
337 {0x0118, 0x0119, 0x0045}, {0x0118, 0x0119, 0x0045},
338 {0x011A, 0x011B, 0x0045}, {0x011A, 0x011B, 0x0045},
339 {0x011C, 0x011D, 0x0047}, {0x011C, 0x011D, 0x0047},
340 {0x011E, 0x011F, 0x0047}, {0x011E, 0x011F, 0x0047},
341 {0x0120, 0x0121, 0x0047}, {0x0120, 0x0121, 0x0047},
342 {0x0122, 0x0123, 0x0047}, {0x0122, 0x0123, 0x0047},
343 {0x0124, 0x0125, 0x0048}, {0x0124, 0x0125, 0x0048},
344 {0x0126, 0x0127, 0x0126}, {0x0126, 0x0127, 0x0126},
345 {0x0128, 0x0129, 0x0049}, {0x0128, 0x0129, 0x0049},
346 {0x012A, 0x012B, 0x0049}, {0x012A, 0x012B, 0x0049},
347 {0x012C, 0x012D, 0x0049}, {0x012C, 0x012D, 0x0049},
348 {0x012E, 0x012F, 0x0049}, {0x012E, 0x012F, 0x0049},
349 {0x0130, 0x0069, 0x0049}, {0x0049, 0x0131, 0x0049},
350 {0x0132, 0x0133, 0x0132}, {0x0132, 0x0133, 0x0132},
351 {0x0134, 0x0135, 0x004A}, {0x0134, 0x0135, 0x004A},
352 {0x0136, 0x0137, 0x004B}, {0x0136, 0x0137, 0x004B},
353 {0x0138, 0x0138, 0x0138}, {0x0139, 0x013A, 0x004C},
354 {0x0139, 0x013A, 0x004C}, {0x013B, 0x013C, 0x004C},
355 {0x013B, 0x013C, 0x004C}, {0x013D, 0x013E, 0x004C},
356 {0x013D, 0x013E, 0x004C}, {0x013F, 0x0140, 0x013F},
357 {0x013F, 0x0140, 0x013F}, {0x0141, 0x0142, 0x0141},
358 {0x0141, 0x0142, 0x0141}, {0x0143, 0x0144, 0x004E},
359 {0x0143, 0x0144, 0x004E}, {0x0145, 0x0146, 0x004E},
360 {0x0145, 0x0146, 0x004E}, {0x0147, 0x0148, 0x004E},
361 {0x0147, 0x0148, 0x004E}, {0x0149, 0x0149, 0x0149},
362 {0x014A, 0x014B, 0x014A}, {0x014A, 0x014B, 0x014A},
363 {0x014C, 0x014D, 0x004F}, {0x014C, 0x014D, 0x004F},
364 {0x014E, 0x014F, 0x004F}, {0x014E, 0x014F, 0x004F},
365 {0x0150, 0x0151, 0x004F}, {0x0150, 0x0151, 0x004F},
366 {0x0152, 0x0153, 0x0152}, {0x0152, 0x0153, 0x0152},
367 {0x0154, 0x0155, 0x0052}, {0x0154, 0x0155, 0x0052},
368 {0x0156, 0x0157, 0x0052}, {0x0156, 0x0157, 0x0052},
369 {0x0158, 0x0159, 0x0052}, {0x0158, 0x0159, 0x0052},
370 {0x015A, 0x015B, 0x0053}, {0x015A, 0x015B, 0x0053},
371 {0x015C, 0x015D, 0x0053}, {0x015C, 0x015D, 0x0053},
372 {0x015E, 0x015F, 0x0053}, {0x015E, 0x015F, 0x0053},
373 {0x0160, 0x0161, 0x0053}, {0x0160, 0x0161, 0x0053},
374 {0x0162, 0x0163, 0x0054}, {0x0162, 0x0163, 0x0054},
375 {0x0164, 0x0165, 0x0054}, {0x0164, 0x0165, 0x0054},
376 {0x0166, 0x0167, 0x0166}, {0x0166, 0x0167, 0x0166},
377 {0x0168, 0x0169, 0x0055}, {0x0168, 0x0169, 0x0055},
378 {0x016A, 0x016B, 0x0055}, {0x016A, 0x016B, 0x0055},
379 {0x016C, 0x016D, 0x0055}, {0x016C, 0x016D, 0x0055},
380 {0x016E, 0x016F, 0x0055}, {0x016E, 0x016F, 0x0055},
381 {0x0170, 0x0171, 0x0055}, {0x0170, 0x0171, 0x0055},
382 {0x0172, 0x0173, 0x0055}, {0x0172, 0x0173, 0x0055},
383 {0x0174, 0x0175, 0x0057}, {0x0174, 0x0175, 0x0057},
384 {0x0176, 0x0177, 0x0059}, {0x0176, 0x0177, 0x0059},
385 {0x0178, 0x00FF, 0x0059}, {0x0179, 0x017A, 0x005A},
386 {0x0179, 0x017A, 0x005A}, {0x017B, 0x017C, 0x005A},
387 {0x017B, 0x017C, 0x005A}, {0x017D, 0x017E, 0x005A},
388 {0x017D, 0x017E, 0x005A}, {0x0053, 0x017F, 0x0053},
389 {0x0180, 0x0180, 0x0180}, {0x0181, 0x0253, 0x0181},
390 {0x0182, 0x0183, 0x0182}, {0x0182, 0x0183, 0x0182},
391 {0x0184, 0x0185, 0x0184}, {0x0184, 0x0185, 0x0184},
392 {0x0186, 0x0254, 0x0186}, {0x0187, 0x0188, 0x0187},
393 {0x0187, 0x0188, 0x0187}, {0x0189, 0x0256, 0x0189},
394 {0x018A, 0x0257, 0x018A}, {0x018B, 0x018C, 0x018B},
395 {0x018B, 0x018C, 0x018B}, {0x018D, 0x018D, 0x018D},
396 {0x018E, 0x01DD, 0x018E}, {0x018F, 0x0259, 0x018F},
397 {0x0190, 0x025B, 0x0190}, {0x0191, 0x0192, 0x0191},
398 {0x0191, 0x0192, 0x0191}, {0x0193, 0x0260, 0x0193},
399 {0x0194, 0x0263, 0x0194}, {0x01F6, 0x0195, 0x01F6},
400 {0x0196, 0x0269, 0x0196}, {0x0197, 0x0268, 0x0197},
401 {0x0198, 0x0199, 0x0198}, {0x0198, 0x0199, 0x0198},
402 {0x019A, 0x019A, 0x019A}, {0x019B, 0x019B, 0x019B},
403 {0x019C, 0x026F, 0x019C}, {0x019D, 0x0272, 0x019D},
404 {0x019E, 0x019E, 0x019E}, {0x019F, 0x0275, 0x019F},
405 {0x01A0, 0x01A1, 0x004F}, {0x01A0, 0x01A1, 0x004F},
406 {0x01A2, 0x01A3, 0x01A2}, {0x01A2, 0x01A3, 0x01A2},
407 {0x01A4, 0x01A5, 0x01A4}, {0x01A4, 0x01A5, 0x01A4},
408 {0x01A6, 0x0280, 0x01A6}, {0x01A7, 0x01A8, 0x01A7},
409 {0x01A7, 0x01A8, 0x01A7}, {0x01A9, 0x0283, 0x01A9},
410 {0x01AA, 0x01AA, 0x01AA}, {0x01AB, 0x01AB, 0x01AB},
411 {0x01AC, 0x01AD, 0x01AC}, {0x01AC, 0x01AD, 0x01AC},
412 {0x01AE, 0x0288, 0x01AE}, {0x01AF, 0x01B0, 0x0055},
413 {0x01AF, 0x01B0, 0x0055}, {0x01B1, 0x028A, 0x01B1},
414 {0x01B2, 0x028B, 0x01B2}, {0x01B3, 0x01B4, 0x01B3},
415 {0x01B3, 0x01B4, 0x01B3}, {0x01B5, 0x01B6, 0x01B5},
416 {0x01B5, 0x01B6, 0x01B5}, {0x01B7, 0x0292, 0x01B7},
417 {0x01B8, 0x01B9, 0x01B8}, {0x01B8, 0x01B9, 0x01B8},
418 {0x01BA, 0x01BA, 0x01BA}, {0x01BB, 0x01BB, 0x01BB},
419 {0x01BC, 0x01BD, 0x01BC}, {0x01BC, 0x01BD, 0x01BC},
420 {0x01BE, 0x01BE, 0x01BE}, {0x01F7, 0x01BF, 0x01F7},
421 {0x01C0, 0x01C0, 0x01C0}, {0x01C1, 0x01C1, 0x01C1},
422 {0x01C2, 0x01C2, 0x01C2}, {0x01C3, 0x01C3, 0x01C3},
423 {0x01C4, 0x01C6, 0x01C4}, {0x01C4, 0x01C6, 0x01C4},
424 {0x01C4, 0x01C6, 0x01C4}, {0x01C7, 0x01C9, 0x01C7},
425 {0x01C7, 0x01C9, 0x01C7}, {0x01C7, 0x01C9, 0x01C7},
426 {0x01CA, 0x01CC, 0x01CA}, {0x01CA, 0x01CC, 0x01CA},
427 {0x01CA, 0x01CC, 0x01CA}, {0x01CD, 0x01CE, 0x0041},
428 {0x01CD, 0x01CE, 0x0041}, {0x01CF, 0x01D0, 0x0049},
429 {0x01CF, 0x01D0, 0x0049}, {0x01D1, 0x01D2, 0x004F},
430 {0x01D1, 0x01D2, 0x004F}, {0x01D3, 0x01D4, 0x0055},
431 {0x01D3, 0x01D4, 0x0055}, {0x01D5, 0x01D6, 0x0055},
432 {0x01D5, 0x01D6, 0x0055}, {0x01D7, 0x01D8, 0x0055},
433 {0x01D7, 0x01D8, 0x0055}, {0x01D9, 0x01DA, 0x0055},
434 {0x01D9, 0x01DA, 0x0055}, {0x01DB, 0x01DC, 0x0055},
435 {0x01DB, 0x01DC, 0x0055}, {0x018E, 0x01DD, 0x018E},
436 {0x01DE, 0x01DF, 0x0041}, {0x01DE, 0x01DF, 0x0041},
437 {0x01E0, 0x01E1, 0x0041}, {0x01E0, 0x01E1, 0x0041},
438 {0x01E2, 0x01E3, 0x00C6}, {0x01E2, 0x01E3, 0x00C6},
439 {0x01E4, 0x01E5, 0x01E4}, {0x01E4, 0x01E5, 0x01E4},
440 {0x01E6, 0x01E7, 0x0047}, {0x01E6, 0x01E7, 0x0047},
441 {0x01E8, 0x01E9, 0x004B}, {0x01E8, 0x01E9, 0x004B},
442 {0x01EA, 0x01EB, 0x004F}, {0x01EA, 0x01EB, 0x004F},
443 {0x01EC, 0x01ED, 0x004F}, {0x01EC, 0x01ED, 0x004F},
444 {0x01EE, 0x01EF, 0x01B7}, {0x01EE, 0x01EF, 0x01B7},
445 {0x01F0, 0x01F0, 0x004A}, {0x01F1, 0x01F3, 0x01F1},
446 {0x01F1, 0x01F3, 0x01F1}, {0x01F1, 0x01F3, 0x01F1},
447 {0x01F4, 0x01F5, 0x0047}, {0x01F4, 0x01F5, 0x0047},
448 {0x01F6, 0x0195, 0x01F6}, {0x01F7, 0x01BF, 0x01F7},
449 {0x01F8, 0x01F9, 0x004E}, {0x01F8, 0x01F9, 0x004E},
450 {0x01FA, 0x01FB, 0x0041}, {0x01FA, 0x01FB, 0x0041},
451 {0x01FC, 0x01FD, 0x00C6}, {0x01FC, 0x01FD, 0x00C6},
452 {0x01FE, 0x01FF, 0x00D8}, {0x01FE, 0x01FF, 0x00D8}};
453
454 static const MY_UNICASE_CHARACTER plane02[] = {
455 {0x0200, 0x0201, 0x0041}, {0x0200, 0x0201, 0x0041},
456 {0x0202, 0x0203, 0x0041}, {0x0202, 0x0203, 0x0041},
457 {0x0204, 0x0205, 0x0045}, {0x0204, 0x0205, 0x0045},
458 {0x0206, 0x0207, 0x0045}, {0x0206, 0x0207, 0x0045},
459 {0x0208, 0x0209, 0x0049}, {0x0208, 0x0209, 0x0049},
460 {0x020A, 0x020B, 0x0049}, {0x020A, 0x020B, 0x0049},
461 {0x020C, 0x020D, 0x004F}, {0x020C, 0x020D, 0x004F},
462 {0x020E, 0x020F, 0x004F}, {0x020E, 0x020F, 0x004F},
463 {0x0210, 0x0211, 0x0052}, {0x0210, 0x0211, 0x0052},
464 {0x0212, 0x0213, 0x0052}, {0x0212, 0x0213, 0x0052},
465 {0x0214, 0x0215, 0x0055}, {0x0214, 0x0215, 0x0055},
466 {0x0216, 0x0217, 0x0055}, {0x0216, 0x0217, 0x0055},
467 {0x0218, 0x0219, 0x0053}, {0x0218, 0x0219, 0x0053},
468 {0x021A, 0x021B, 0x0054}, {0x021A, 0x021B, 0x0054},
469 {0x021C, 0x021D, 0x021C}, {0x021C, 0x021D, 0x021C},
470 {0x021E, 0x021F, 0x0048}, {0x021E, 0x021F, 0x0048},
471 {0x0220, 0x0220, 0x0220}, {0x0221, 0x0221, 0x0221},
472 {0x0222, 0x0223, 0x0222}, {0x0222, 0x0223, 0x0222},
473 {0x0224, 0x0225, 0x0224}, {0x0224, 0x0225, 0x0224},
474 {0x0226, 0x0227, 0x0041}, {0x0226, 0x0227, 0x0041},
475 {0x0228, 0x0229, 0x0045}, {0x0228, 0x0229, 0x0045},
476 {0x022A, 0x022B, 0x004F}, {0x022A, 0x022B, 0x004F},
477 {0x022C, 0x022D, 0x004F}, {0x022C, 0x022D, 0x004F},
478 {0x022E, 0x022F, 0x004F}, {0x022E, 0x022F, 0x004F},
479 {0x0230, 0x0231, 0x004F}, {0x0230, 0x0231, 0x004F},
480 {0x0232, 0x0233, 0x0059}, {0x0232, 0x0233, 0x0059},
481 {0x0234, 0x0234, 0x0234}, {0x0235, 0x0235, 0x0235},
482 {0x0236, 0x0236, 0x0236}, {0x0237, 0x0237, 0x0237},
483 {0x0238, 0x0238, 0x0238}, {0x0239, 0x0239, 0x0239},
484 {0x023A, 0x023A, 0x023A}, {0x023B, 0x023B, 0x023B},
485 {0x023C, 0x023C, 0x023C}, {0x023D, 0x023D, 0x023D},
486 {0x023E, 0x023E, 0x023E}, {0x023F, 0x023F, 0x023F},
487 {0x0240, 0x0240, 0x0240}, {0x0241, 0x0241, 0x0241},
488 {0x0242, 0x0242, 0x0242}, {0x0243, 0x0243, 0x0243},
489 {0x0244, 0x0244, 0x0244}, {0x0245, 0x0245, 0x0245},
490 {0x0246, 0x0246, 0x0246}, {0x0247, 0x0247, 0x0247},
491 {0x0248, 0x0248, 0x0248}, {0x0249, 0x0249, 0x0249},
492 {0x024A, 0x024A, 0x024A}, {0x024B, 0x024B, 0x024B},
493 {0x024C, 0x024C, 0x024C}, {0x024D, 0x024D, 0x024D},
494 {0x024E, 0x024E, 0x024E}, {0x024F, 0x024F, 0x024F},
495 {0x0250, 0x0250, 0x0250}, {0x0251, 0x0251, 0x0251},
496 {0x0252, 0x0252, 0x0252}, {0x0181, 0x0253, 0x0181},
497 {0x0186, 0x0254, 0x0186}, {0x0255, 0x0255, 0x0255},
498 {0x0189, 0x0256, 0x0189}, {0x018A, 0x0257, 0x018A},
499 {0x0258, 0x0258, 0x0258}, {0x018F, 0x0259, 0x018F},
500 {0x025A, 0x025A, 0x025A}, {0x0190, 0x025B, 0x0190},
501 {0x025C, 0x025C, 0x025C}, {0x025D, 0x025D, 0x025D},
502 {0x025E, 0x025E, 0x025E}, {0x025F, 0x025F, 0x025F},
503 {0x0193, 0x0260, 0x0193}, {0x0261, 0x0261, 0x0261},
504 {0x0262, 0x0262, 0x0262}, {0x0194, 0x0263, 0x0194},
505 {0x0264, 0x0264, 0x0264}, {0x0265, 0x0265, 0x0265},
506 {0x0266, 0x0266, 0x0266}, {0x0267, 0x0267, 0x0267},
507 {0x0197, 0x0268, 0x0197}, {0x0196, 0x0269, 0x0196},
508 {0x026A, 0x026A, 0x026A}, {0x026B, 0x026B, 0x026B},
509 {0x026C, 0x026C, 0x026C}, {0x026D, 0x026D, 0x026D},
510 {0x026E, 0x026E, 0x026E}, {0x019C, 0x026F, 0x019C},
511 {0x0270, 0x0270, 0x0270}, {0x0271, 0x0271, 0x0271},
512 {0x019D, 0x0272, 0x019D}, {0x0273, 0x0273, 0x0273},
513 {0x0274, 0x0274, 0x0274}, {0x019F, 0x0275, 0x019F},
514 {0x0276, 0x0276, 0x0276}, {0x0277, 0x0277, 0x0277},
515 {0x0278, 0x0278, 0x0278}, {0x0279, 0x0279, 0x0279},
516 {0x027A, 0x027A, 0x027A}, {0x027B, 0x027B, 0x027B},
517 {0x027C, 0x027C, 0x027C}, {0x027D, 0x027D, 0x027D},
518 {0x027E, 0x027E, 0x027E}, {0x027F, 0x027F, 0x027F},
519 {0x01A6, 0x0280, 0x01A6}, {0x0281, 0x0281, 0x0281},
520 {0x0282, 0x0282, 0x0282}, {0x01A9, 0x0283, 0x01A9},
521 {0x0284, 0x0284, 0x0284}, {0x0285, 0x0285, 0x0285},
522 {0x0286, 0x0286, 0x0286}, {0x0287, 0x0287, 0x0287},
523 {0x01AE, 0x0288, 0x01AE}, {0x0289, 0x0289, 0x0289},
524 {0x01B1, 0x028A, 0x01B1}, {0x01B2, 0x028B, 0x01B2},
525 {0x028C, 0x028C, 0x028C}, {0x028D, 0x028D, 0x028D},
526 {0x028E, 0x028E, 0x028E}, {0x028F, 0x028F, 0x028F},
527 {0x0290, 0x0290, 0x0290}, {0x0291, 0x0291, 0x0291},
528 {0x01B7, 0x0292, 0x01B7}, {0x0293, 0x0293, 0x0293},
529 {0x0294, 0x0294, 0x0294}, {0x0295, 0x0295, 0x0295},
530 {0x0296, 0x0296, 0x0296}, {0x0297, 0x0297, 0x0297},
531 {0x0298, 0x0298, 0x0298}, {0x0299, 0x0299, 0x0299},
532 {0x029A, 0x029A, 0x029A}, {0x029B, 0x029B, 0x029B},
533 {0x029C, 0x029C, 0x029C}, {0x029D, 0x029D, 0x029D},
534 {0x029E, 0x029E, 0x029E}, {0x029F, 0x029F, 0x029F},
535 {0x02A0, 0x02A0, 0x02A0}, {0x02A1, 0x02A1, 0x02A1},
536 {0x02A2, 0x02A2, 0x02A2}, {0x02A3, 0x02A3, 0x02A3},
537 {0x02A4, 0x02A4, 0x02A4}, {0x02A5, 0x02A5, 0x02A5},
538 {0x02A6, 0x02A6, 0x02A6}, {0x02A7, 0x02A7, 0x02A7},
539 {0x02A8, 0x02A8, 0x02A8}, {0x02A9, 0x02A9, 0x02A9},
540 {0x02AA, 0x02AA, 0x02AA}, {0x02AB, 0x02AB, 0x02AB},
541 {0x02AC, 0x02AC, 0x02AC}, {0x02AD, 0x02AD, 0x02AD},
542 {0x02AE, 0x02AE, 0x02AE}, {0x02AF, 0x02AF, 0x02AF},
543 {0x02B0, 0x02B0, 0x02B0}, {0x02B1, 0x02B1, 0x02B1},
544 {0x02B2, 0x02B2, 0x02B2}, {0x02B3, 0x02B3, 0x02B3},
545 {0x02B4, 0x02B4, 0x02B4}, {0x02B5, 0x02B5, 0x02B5},
546 {0x02B6, 0x02B6, 0x02B6}, {0x02B7, 0x02B7, 0x02B7},
547 {0x02B8, 0x02B8, 0x02B8}, {0x02B9, 0x02B9, 0x02B9},
548 {0x02BA, 0x02BA, 0x02BA}, {0x02BB, 0x02BB, 0x02BB},
549 {0x02BC, 0x02BC, 0x02BC}, {0x02BD, 0x02BD, 0x02BD},
550 {0x02BE, 0x02BE, 0x02BE}, {0x02BF, 0x02BF, 0x02BF},
551 {0x02C0, 0x02C0, 0x02C0}, {0x02C1, 0x02C1, 0x02C1},
552 {0x02C2, 0x02C2, 0x02C2}, {0x02C3, 0x02C3, 0x02C3},
553 {0x02C4, 0x02C4, 0x02C4}, {0x02C5, 0x02C5, 0x02C5},
554 {0x02C6, 0x02C6, 0x02C6}, {0x02C7, 0x02C7, 0x02C7},
555 {0x02C8, 0x02C8, 0x02C8}, {0x02C9, 0x02C9, 0x02C9},
556 {0x02CA, 0x02CA, 0x02CA}, {0x02CB, 0x02CB, 0x02CB},
557 {0x02CC, 0x02CC, 0x02CC}, {0x02CD, 0x02CD, 0x02CD},
558 {0x02CE, 0x02CE, 0x02CE}, {0x02CF, 0x02CF, 0x02CF},
559 {0x02D0, 0x02D0, 0x02D0}, {0x02D1, 0x02D1, 0x02D1},
560 {0x02D2, 0x02D2, 0x02D2}, {0x02D3, 0x02D3, 0x02D3},
561 {0x02D4, 0x02D4, 0x02D4}, {0x02D5, 0x02D5, 0x02D5},
562 {0x02D6, 0x02D6, 0x02D6}, {0x02D7, 0x02D7, 0x02D7},
563 {0x02D8, 0x02D8, 0x02D8}, {0x02D9, 0x02D9, 0x02D9},
564 {0x02DA, 0x02DA, 0x02DA}, {0x02DB, 0x02DB, 0x02DB},
565 {0x02DC, 0x02DC, 0x02DC}, {0x02DD, 0x02DD, 0x02DD},
566 {0x02DE, 0x02DE, 0x02DE}, {0x02DF, 0x02DF, 0x02DF},
567 {0x02E0, 0x02E0, 0x02E0}, {0x02E1, 0x02E1, 0x02E1},
568 {0x02E2, 0x02E2, 0x02E2}, {0x02E3, 0x02E3, 0x02E3},
569 {0x02E4, 0x02E4, 0x02E4}, {0x02E5, 0x02E5, 0x02E5},
570 {0x02E6, 0x02E6, 0x02E6}, {0x02E7, 0x02E7, 0x02E7},
571 {0x02E8, 0x02E8, 0x02E8}, {0x02E9, 0x02E9, 0x02E9},
572 {0x02EA, 0x02EA, 0x02EA}, {0x02EB, 0x02EB, 0x02EB},
573 {0x02EC, 0x02EC, 0x02EC}, {0x02ED, 0x02ED, 0x02ED},
574 {0x02EE, 0x02EE, 0x02EE}, {0x02EF, 0x02EF, 0x02EF},
575 {0x02F0, 0x02F0, 0x02F0}, {0x02F1, 0x02F1, 0x02F1},
576 {0x02F2, 0x02F2, 0x02F2}, {0x02F3, 0x02F3, 0x02F3},
577 {0x02F4, 0x02F4, 0x02F4}, {0x02F5, 0x02F5, 0x02F5},
578 {0x02F6, 0x02F6, 0x02F6}, {0x02F7, 0x02F7, 0x02F7},
579 {0x02F8, 0x02F8, 0x02F8}, {0x02F9, 0x02F9, 0x02F9},
580 {0x02FA, 0x02FA, 0x02FA}, {0x02FB, 0x02FB, 0x02FB},
581 {0x02FC, 0x02FC, 0x02FC}, {0x02FD, 0x02FD, 0x02FD},
582 {0x02FE, 0x02FE, 0x02FE}, {0x02FF, 0x02FF, 0x02FF}};
583
584 static const MY_UNICASE_CHARACTER plane03[] = {
585 {0x0300, 0x0300, 0x0300}, {0x0301, 0x0301, 0x0301},
586 {0x0302, 0x0302, 0x0302}, {0x0303, 0x0303, 0x0303},
587 {0x0304, 0x0304, 0x0304}, {0x0305, 0x0305, 0x0305},
588 {0x0306, 0x0306, 0x0306}, {0x0307, 0x0307, 0x0307},
589 {0x0308, 0x0308, 0x0308}, {0x0309, 0x0309, 0x0309},
590 {0x030A, 0x030A, 0x030A}, {0x030B, 0x030B, 0x030B},
591 {0x030C, 0x030C, 0x030C}, {0x030D, 0x030D, 0x030D},
592 {0x030E, 0x030E, 0x030E}, {0x030F, 0x030F, 0x030F},
593 {0x0310, 0x0310, 0x0310}, {0x0311, 0x0311, 0x0311},
594 {0x0312, 0x0312, 0x0312}, {0x0313, 0x0313, 0x0313},
595 {0x0314, 0x0314, 0x0314}, {0x0315, 0x0315, 0x0315},
596 {0x0316, 0x0316, 0x0316}, {0x0317, 0x0317, 0x0317},
597 {0x0318, 0x0318, 0x0318}, {0x0319, 0x0319, 0x0319},
598 {0x031A, 0x031A, 0x031A}, {0x031B, 0x031B, 0x031B},
599 {0x031C, 0x031C, 0x031C}, {0x031D, 0x031D, 0x031D},
600 {0x031E, 0x031E, 0x031E}, {0x031F, 0x031F, 0x031F},
601 {0x0320, 0x0320, 0x0320}, {0x0321, 0x0321, 0x0321},
602 {0x0322, 0x0322, 0x0322}, {0x0323, 0x0323, 0x0323},
603 {0x0324, 0x0324, 0x0324}, {0x0325, 0x0325, 0x0325},
604 {0x0326, 0x0326, 0x0326}, {0x0327, 0x0327, 0x0327},
605 {0x0328, 0x0328, 0x0328}, {0x0329, 0x0329, 0x0329},
606 {0x032A, 0x032A, 0x032A}, {0x032B, 0x032B, 0x032B},
607 {0x032C, 0x032C, 0x032C}, {0x032D, 0x032D, 0x032D},
608 {0x032E, 0x032E, 0x032E}, {0x032F, 0x032F, 0x032F},
609 {0x0330, 0x0330, 0x0330}, {0x0331, 0x0331, 0x0331},
610 {0x0332, 0x0332, 0x0332}, {0x0333, 0x0333, 0x0333},
611 {0x0334, 0x0334, 0x0334}, {0x0335, 0x0335, 0x0335},
612 {0x0336, 0x0336, 0x0336}, {0x0337, 0x0337, 0x0337},
613 {0x0338, 0x0338, 0x0338}, {0x0339, 0x0339, 0x0339},
614 {0x033A, 0x033A, 0x033A}, {0x033B, 0x033B, 0x033B},
615 {0x033C, 0x033C, 0x033C}, {0x033D, 0x033D, 0x033D},
616 {0x033E, 0x033E, 0x033E}, {0x033F, 0x033F, 0x033F},
617 {0x0340, 0x0340, 0x0340}, {0x0341, 0x0341, 0x0341},
618 {0x0342, 0x0342, 0x0342}, {0x0343, 0x0343, 0x0343},
619 {0x0344, 0x0344, 0x0344}, {0x0399, 0x0345, 0x0399},
620 {0x0346, 0x0346, 0x0346}, {0x0347, 0x0347, 0x0347},
621 {0x0348, 0x0348, 0x0348}, {0x0349, 0x0349, 0x0349},
622 {0x034A, 0x034A, 0x034A}, {0x034B, 0x034B, 0x034B},
623 {0x034C, 0x034C, 0x034C}, {0x034D, 0x034D, 0x034D},
624 {0x034E, 0x034E, 0x034E}, {0x034F, 0x034F, 0x034F},
625 {0x0350, 0x0350, 0x0350}, {0x0351, 0x0351, 0x0351},
626 {0x0352, 0x0352, 0x0352}, {0x0353, 0x0353, 0x0353},
627 {0x0354, 0x0354, 0x0354}, {0x0355, 0x0355, 0x0355},
628 {0x0356, 0x0356, 0x0356}, {0x0357, 0x0357, 0x0357},
629 {0x0358, 0x0358, 0x0358}, {0x0359, 0x0359, 0x0359},
630 {0x035A, 0x035A, 0x035A}, {0x035B, 0x035B, 0x035B},
631 {0x035C, 0x035C, 0x035C}, {0x035D, 0x035D, 0x035D},
632 {0x035E, 0x035E, 0x035E}, {0x035F, 0x035F, 0x035F},
633 {0x0360, 0x0360, 0x0360}, {0x0361, 0x0361, 0x0361},
634 {0x0362, 0x0362, 0x0362}, {0x0363, 0x0363, 0x0363},
635 {0x0364, 0x0364, 0x0364}, {0x0365, 0x0365, 0x0365},
636 {0x0366, 0x0366, 0x0366}, {0x0367, 0x0367, 0x0367},
637 {0x0368, 0x0368, 0x0368}, {0x0369, 0x0369, 0x0369},
638 {0x036A, 0x036A, 0x036A}, {0x036B, 0x036B, 0x036B},
639 {0x036C, 0x036C, 0x036C}, {0x036D, 0x036D, 0x036D},
640 {0x036E, 0x036E, 0x036E}, {0x036F, 0x036F, 0x036F},
641 {0x0370, 0x0370, 0x0370}, {0x0371, 0x0371, 0x0371},
642 {0x0372, 0x0372, 0x0372}, {0x0373, 0x0373, 0x0373},
643 {0x0374, 0x0374, 0x0374}, {0x0375, 0x0375, 0x0375},
644 {0x0376, 0x0376, 0x0376}, {0x0377, 0x0377, 0x0377},
645 {0x0378, 0x0378, 0x0378}, {0x0379, 0x0379, 0x0379},
646 {0x037A, 0x037A, 0x037A}, {0x037B, 0x037B, 0x037B},
647 {0x037C, 0x037C, 0x037C}, {0x037D, 0x037D, 0x037D},
648 {0x037E, 0x037E, 0x037E}, {0x037F, 0x037F, 0x037F},
649 {0x0380, 0x0380, 0x0380}, {0x0381, 0x0381, 0x0381},
650 {0x0382, 0x0382, 0x0382}, {0x0383, 0x0383, 0x0383},
651 {0x0384, 0x0384, 0x0384}, {0x0385, 0x0385, 0x0385},
652 {0x0386, 0x03AC, 0x0391}, {0x0387, 0x0387, 0x0387},
653 {0x0388, 0x03AD, 0x0395}, {0x0389, 0x03AE, 0x0397},
654 {0x038A, 0x03AF, 0x0399}, {0x038B, 0x038B, 0x038B},
655 {0x038C, 0x03CC, 0x039F}, {0x038D, 0x038D, 0x038D},
656 {0x038E, 0x03CD, 0x03A5}, {0x038F, 0x03CE, 0x03A9},
657 {0x0390, 0x0390, 0x0399}, {0x0391, 0x03B1, 0x0391},
658 {0x0392, 0x03B2, 0x0392}, {0x0393, 0x03B3, 0x0393},
659 {0x0394, 0x03B4, 0x0394}, {0x0395, 0x03B5, 0x0395},
660 {0x0396, 0x03B6, 0x0396}, {0x0397, 0x03B7, 0x0397},
661 {0x0398, 0x03B8, 0x0398}, {0x0399, 0x03B9, 0x0399},
662 {0x039A, 0x03BA, 0x039A}, {0x039B, 0x03BB, 0x039B},
663 {0x039C, 0x03BC, 0x039C}, {0x039D, 0x03BD, 0x039D},
664 {0x039E, 0x03BE, 0x039E}, {0x039F, 0x03BF, 0x039F},
665 {0x03A0, 0x03C0, 0x03A0}, {0x03A1, 0x03C1, 0x03A1},
666 {0x03A2, 0x03A2, 0x03A2}, {0x03A3, 0x03C3, 0x03A3},
667 {0x03A4, 0x03C4, 0x03A4}, {0x03A5, 0x03C5, 0x03A5},
668 {0x03A6, 0x03C6, 0x03A6}, {0x03A7, 0x03C7, 0x03A7},
669 {0x03A8, 0x03C8, 0x03A8}, {0x03A9, 0x03C9, 0x03A9},
670 {0x03AA, 0x03CA, 0x0399}, {0x03AB, 0x03CB, 0x03A5},
671 {0x0386, 0x03AC, 0x0391}, {0x0388, 0x03AD, 0x0395},
672 {0x0389, 0x03AE, 0x0397}, {0x038A, 0x03AF, 0x0399},
673 {0x03B0, 0x03B0, 0x03A5}, {0x0391, 0x03B1, 0x0391},
674 {0x0392, 0x03B2, 0x0392}, {0x0393, 0x03B3, 0x0393},
675 {0x0394, 0x03B4, 0x0394}, {0x0395, 0x03B5, 0x0395},
676 {0x0396, 0x03B6, 0x0396}, {0x0397, 0x03B7, 0x0397},
677 {0x0398, 0x03B8, 0x0398}, {0x0399, 0x03B9, 0x0399},
678 {0x039A, 0x03BA, 0x039A}, {0x039B, 0x03BB, 0x039B},
679 {0x039C, 0x03BC, 0x039C}, {0x039D, 0x03BD, 0x039D},
680 {0x039E, 0x03BE, 0x039E}, {0x039F, 0x03BF, 0x039F},
681 {0x03A0, 0x03C0, 0x03A0}, {0x03A1, 0x03C1, 0x03A1},
682 {0x03A3, 0x03C2, 0x03A3}, {0x03A3, 0x03C3, 0x03A3},
683 {0x03A4, 0x03C4, 0x03A4}, {0x03A5, 0x03C5, 0x03A5},
684 {0x03A6, 0x03C6, 0x03A6}, {0x03A7, 0x03C7, 0x03A7},
685 {0x03A8, 0x03C8, 0x03A8}, {0x03A9, 0x03C9, 0x03A9},
686 {0x03AA, 0x03CA, 0x0399}, {0x03AB, 0x03CB, 0x03A5},
687 {0x038C, 0x03CC, 0x039F}, {0x038E, 0x03CD, 0x03A5},
688 {0x038F, 0x03CE, 0x03A9}, {0x03CF, 0x03CF, 0x03CF},
689 {0x0392, 0x03D0, 0x0392}, {0x0398, 0x03D1, 0x0398},
690 {0x03D2, 0x03D2, 0x03D2}, {0x03D3, 0x03D3, 0x03D2},
691 {0x03D4, 0x03D4, 0x03D2}, {0x03A6, 0x03D5, 0x03A6},
692 {0x03A0, 0x03D6, 0x03A0}, {0x03D7, 0x03D7, 0x03D7},
693 {0x03D8, 0x03D8, 0x03D8}, {0x03D9, 0x03D9, 0x03D9},
694 {0x03DA, 0x03DB, 0x03DA}, {0x03DA, 0x03DB, 0x03DA},
695 {0x03DC, 0x03DD, 0x03DC}, {0x03DC, 0x03DD, 0x03DC},
696 {0x03DE, 0x03DF, 0x03DE}, {0x03DE, 0x03DF, 0x03DE},
697 {0x03E0, 0x03E1, 0x03E0}, {0x03E0, 0x03E1, 0x03E0},
698 {0x03E2, 0x03E3, 0x03E2}, {0x03E2, 0x03E3, 0x03E2},
699 {0x03E4, 0x03E5, 0x03E4}, {0x03E4, 0x03E5, 0x03E4},
700 {0x03E6, 0x03E7, 0x03E6}, {0x03E6, 0x03E7, 0x03E6},
701 {0x03E8, 0x03E9, 0x03E8}, {0x03E8, 0x03E9, 0x03E8},
702 {0x03EA, 0x03EB, 0x03EA}, {0x03EA, 0x03EB, 0x03EA},
703 {0x03EC, 0x03ED, 0x03EC}, {0x03EC, 0x03ED, 0x03EC},
704 {0x03EE, 0x03EF, 0x03EE}, {0x03EE, 0x03EF, 0x03EE},
705 {0x039A, 0x03F0, 0x039A}, {0x03A1, 0x03F1, 0x03A1},
706 {0x03A3, 0x03F2, 0x03A3}, {0x03F3, 0x03F3, 0x03F3},
707 {0x03F4, 0x03F4, 0x03F4}, {0x03F5, 0x03F5, 0x03F5},
708 {0x03F6, 0x03F6, 0x03F6}, {0x03F7, 0x03F7, 0x03F7},
709 {0x03F8, 0x03F8, 0x03F8}, {0x03F9, 0x03F9, 0x03F9},
710 {0x03FA, 0x03FA, 0x03FA}, {0x03FB, 0x03FB, 0x03FB},
711 {0x03FC, 0x03FC, 0x03FC}, {0x03FD, 0x03FD, 0x03FD},
712 {0x03FE, 0x03FE, 0x03FE}, {0x03FF, 0x03FF, 0x03FF}};
713
714 static const MY_UNICASE_CHARACTER plane04[] = {
715 {0x0400, 0x0450, 0x0415}, {0x0401, 0x0451, 0x0415},
716 {0x0402, 0x0452, 0x0402}, {0x0403, 0x0453, 0x0413},
717 {0x0404, 0x0454, 0x0404}, {0x0405, 0x0455, 0x0405},
718 {0x0406, 0x0456, 0x0406}, {0x0407, 0x0457, 0x0406},
719 {0x0408, 0x0458, 0x0408}, {0x0409, 0x0459, 0x0409},
720 {0x040A, 0x045A, 0x040A}, {0x040B, 0x045B, 0x040B},
721 {0x040C, 0x045C, 0x041A}, {0x040D, 0x045D, 0x0418},
722 {0x040E, 0x045E, 0x0423}, {0x040F, 0x045F, 0x040F},
723 {0x0410, 0x0430, 0x0410}, {0x0411, 0x0431, 0x0411},
724 {0x0412, 0x0432, 0x0412}, {0x0413, 0x0433, 0x0413},
725 {0x0414, 0x0434, 0x0414}, {0x0415, 0x0435, 0x0415},
726 {0x0416, 0x0436, 0x0416}, {0x0417, 0x0437, 0x0417},
727 {0x0418, 0x0438, 0x0418}, {0x0419, 0x0439, 0x0419},
728 {0x041A, 0x043A, 0x041A}, {0x041B, 0x043B, 0x041B},
729 {0x041C, 0x043C, 0x041C}, {0x041D, 0x043D, 0x041D},
730 {0x041E, 0x043E, 0x041E}, {0x041F, 0x043F, 0x041F},
731 {0x0420, 0x0440, 0x0420}, {0x0421, 0x0441, 0x0421},
732 {0x0422, 0x0442, 0x0422}, {0x0423, 0x0443, 0x0423},
733 {0x0424, 0x0444, 0x0424}, {0x0425, 0x0445, 0x0425},
734 {0x0426, 0x0446, 0x0426}, {0x0427, 0x0447, 0x0427},
735 {0x0428, 0x0448, 0x0428}, {0x0429, 0x0449, 0x0429},
736 {0x042A, 0x044A, 0x042A}, {0x042B, 0x044B, 0x042B},
737 {0x042C, 0x044C, 0x042C}, {0x042D, 0x044D, 0x042D},
738 {0x042E, 0x044E, 0x042E}, {0x042F, 0x044F, 0x042F},
739 {0x0410, 0x0430, 0x0410}, {0x0411, 0x0431, 0x0411},
740 {0x0412, 0x0432, 0x0412}, {0x0413, 0x0433, 0x0413},
741 {0x0414, 0x0434, 0x0414}, {0x0415, 0x0435, 0x0415},
742 {0x0416, 0x0436, 0x0416}, {0x0417, 0x0437, 0x0417},
743 {0x0418, 0x0438, 0x0418}, {0x0419, 0x0439, 0x0419},
744 {0x041A, 0x043A, 0x041A}, {0x041B, 0x043B, 0x041B},
745 {0x041C, 0x043C, 0x041C}, {0x041D, 0x043D, 0x041D},
746 {0x041E, 0x043E, 0x041E}, {0x041F, 0x043F, 0x041F},
747 {0x0420, 0x0440, 0x0420}, {0x0421, 0x0441, 0x0421},
748 {0x0422, 0x0442, 0x0422}, {0x0423, 0x0443, 0x0423},
749 {0x0424, 0x0444, 0x0424}, {0x0425, 0x0445, 0x0425},
750 {0x0426, 0x0446, 0x0426}, {0x0427, 0x0447, 0x0427},
751 {0x0428, 0x0448, 0x0428}, {0x0429, 0x0449, 0x0429},
752 {0x042A, 0x044A, 0x042A}, {0x042B, 0x044B, 0x042B},
753 {0x042C, 0x044C, 0x042C}, {0x042D, 0x044D, 0x042D},
754 {0x042E, 0x044E, 0x042E}, {0x042F, 0x044F, 0x042F},
755 {0x0400, 0x0450, 0x0415}, {0x0401, 0x0451, 0x0415},
756 {0x0402, 0x0452, 0x0402}, {0x0403, 0x0453, 0x0413},
757 {0x0404, 0x0454, 0x0404}, {0x0405, 0x0455, 0x0405},
758 {0x0406, 0x0456, 0x0406}, {0x0407, 0x0457, 0x0406},
759 {0x0408, 0x0458, 0x0408}, {0x0409, 0x0459, 0x0409},
760 {0x040A, 0x045A, 0x040A}, {0x040B, 0x045B, 0x040B},
761 {0x040C, 0x045C, 0x041A}, {0x040D, 0x045D, 0x0418},
762 {0x040E, 0x045E, 0x0423}, {0x040F, 0x045F, 0x040F},
763 {0x0460, 0x0461, 0x0460}, {0x0460, 0x0461, 0x0460},
764 {0x0462, 0x0463, 0x0462}, {0x0462, 0x0463, 0x0462},
765 {0x0464, 0x0465, 0x0464}, {0x0464, 0x0465, 0x0464},
766 {0x0466, 0x0467, 0x0466}, {0x0466, 0x0467, 0x0466},
767 {0x0468, 0x0469, 0x0468}, {0x0468, 0x0469, 0x0468},
768 {0x046A, 0x046B, 0x046A}, {0x046A, 0x046B, 0x046A},
769 {0x046C, 0x046D, 0x046C}, {0x046C, 0x046D, 0x046C},
770 {0x046E, 0x046F, 0x046E}, {0x046E, 0x046F, 0x046E},
771 {0x0470, 0x0471, 0x0470}, {0x0470, 0x0471, 0x0470},
772 {0x0472, 0x0473, 0x0472}, {0x0472, 0x0473, 0x0472},
773 {0x0474, 0x0475, 0x0474}, {0x0474, 0x0475, 0x0474},
774 {0x0476, 0x0477, 0x0474}, {0x0476, 0x0477, 0x0474},
775 {0x0478, 0x0479, 0x0478}, {0x0478, 0x0479, 0x0478},
776 {0x047A, 0x047B, 0x047A}, {0x047A, 0x047B, 0x047A},
777 {0x047C, 0x047D, 0x047C}, {0x047C, 0x047D, 0x047C},
778 {0x047E, 0x047F, 0x047E}, {0x047E, 0x047F, 0x047E},
779 {0x0480, 0x0481, 0x0480}, {0x0480, 0x0481, 0x0480},
780 {0x0482, 0x0482, 0x0482}, {0x0483, 0x0483, 0x0483},
781 {0x0484, 0x0484, 0x0484}, {0x0485, 0x0485, 0x0485},
782 {0x0486, 0x0486, 0x0486}, {0x0487, 0x0487, 0x0487},
783 {0x0488, 0x0488, 0x0488}, {0x0489, 0x0489, 0x0489},
784 {0x048A, 0x048A, 0x048A}, {0x048B, 0x048B, 0x048B},
785 {0x048C, 0x048D, 0x048C}, {0x048C, 0x048D, 0x048C},
786 {0x048E, 0x048F, 0x048E}, {0x048E, 0x048F, 0x048E},
787 {0x0490, 0x0491, 0x0490}, {0x0490, 0x0491, 0x0490},
788 {0x0492, 0x0493, 0x0492}, {0x0492, 0x0493, 0x0492},
789 {0x0494, 0x0495, 0x0494}, {0x0494, 0x0495, 0x0494},
790 {0x0496, 0x0497, 0x0496}, {0x0496, 0x0497, 0x0496},
791 {0x0498, 0x0499, 0x0498}, {0x0498, 0x0499, 0x0498},
792 {0x049A, 0x049B, 0x049A}, {0x049A, 0x049B, 0x049A},
793 {0x049C, 0x049D, 0x049C}, {0x049C, 0x049D, 0x049C},
794 {0x049E, 0x049F, 0x049E}, {0x049E, 0x049F, 0x049E},
795 {0x04A0, 0x04A1, 0x04A0}, {0x04A0, 0x04A1, 0x04A0},
796 {0x04A2, 0x04A3, 0x04A2}, {0x04A2, 0x04A3, 0x04A2},
797 {0x04A4, 0x04A5, 0x04A4}, {0x04A4, 0x04A5, 0x04A4},
798 {0x04A6, 0x04A7, 0x04A6}, {0x04A6, 0x04A7, 0x04A6},
799 {0x04A8, 0x04A9, 0x04A8}, {0x04A8, 0x04A9, 0x04A8},
800 {0x04AA, 0x04AB, 0x04AA}, {0x04AA, 0x04AB, 0x04AA},
801 {0x04AC, 0x04AD, 0x04AC}, {0x04AC, 0x04AD, 0x04AC},
802 {0x04AE, 0x04AF, 0x04AE}, {0x04AE, 0x04AF, 0x04AE},
803 {0x04B0, 0x04B1, 0x04B0}, {0x04B0, 0x04B1, 0x04B0},
804 {0x04B2, 0x04B3, 0x04B2}, {0x04B2, 0x04B3, 0x04B2},
805 {0x04B4, 0x04B5, 0x04B4}, {0x04B4, 0x04B5, 0x04B4},
806 {0x04B6, 0x04B7, 0x04B6}, {0x04B6, 0x04B7, 0x04B6},
807 {0x04B8, 0x04B9, 0x04B8}, {0x04B8, 0x04B9, 0x04B8},
808 {0x04BA, 0x04BB, 0x04BA}, {0x04BA, 0x04BB, 0x04BA},
809 {0x04BC, 0x04BD, 0x04BC}, {0x04BC, 0x04BD, 0x04BC},
810 {0x04BE, 0x04BF, 0x04BE}, {0x04BE, 0x04BF, 0x04BE},
811 {0x04C0, 0x04C0, 0x04C0}, {0x04C1, 0x04C2, 0x0416},
812 {0x04C1, 0x04C2, 0x0416}, {0x04C3, 0x04C4, 0x04C3},
813 {0x04C3, 0x04C4, 0x04C3}, {0x04C5, 0x04C5, 0x04C5},
814 {0x04C6, 0x04C6, 0x04C6}, {0x04C7, 0x04C8, 0x04C7},
815 {0x04C7, 0x04C8, 0x04C7}, {0x04C9, 0x04C9, 0x04C9},
816 {0x04CA, 0x04CA, 0x04CA}, {0x04CB, 0x04CC, 0x04CB},
817 {0x04CB, 0x04CC, 0x04CB}, {0x04CD, 0x04CD, 0x04CD},
818 {0x04CE, 0x04CE, 0x04CE}, {0x04CF, 0x04CF, 0x04CF},
819 {0x04D0, 0x04D1, 0x0410}, {0x04D0, 0x04D1, 0x0410},
820 {0x04D2, 0x04D3, 0x0410}, {0x04D2, 0x04D3, 0x0410},
821 {0x04D4, 0x04D5, 0x04D4}, {0x04D4, 0x04D5, 0x04D4},
822 {0x04D6, 0x04D7, 0x0415}, {0x04D6, 0x04D7, 0x0415},
823 {0x04D8, 0x04D9, 0x04D8}, {0x04D8, 0x04D9, 0x04D8},
824 {0x04DA, 0x04DB, 0x04D8}, {0x04DA, 0x04DB, 0x04D8},
825 {0x04DC, 0x04DD, 0x0416}, {0x04DC, 0x04DD, 0x0416},
826 {0x04DE, 0x04DF, 0x0417}, {0x04DE, 0x04DF, 0x0417},
827 {0x04E0, 0x04E1, 0x04E0}, {0x04E0, 0x04E1, 0x04E0},
828 {0x04E2, 0x04E3, 0x0418}, {0x04E2, 0x04E3, 0x0418},
829 {0x04E4, 0x04E5, 0x0418}, {0x04E4, 0x04E5, 0x0418},
830 {0x04E6, 0x04E7, 0x041E}, {0x04E6, 0x04E7, 0x041E},
831 {0x04E8, 0x04E9, 0x04E8}, {0x04E8, 0x04E9, 0x04E8},
832 {0x04EA, 0x04EB, 0x04E8}, {0x04EA, 0x04EB, 0x04E8},
833 {0x04EC, 0x04ED, 0x042D}, {0x04EC, 0x04ED, 0x042D},
834 {0x04EE, 0x04EF, 0x0423}, {0x04EE, 0x04EF, 0x0423},
835 {0x04F0, 0x04F1, 0x0423}, {0x04F0, 0x04F1, 0x0423},
836 {0x04F2, 0x04F3, 0x0423}, {0x04F2, 0x04F3, 0x0423},
837 {0x04F4, 0x04F5, 0x0427}, {0x04F4, 0x04F5, 0x0427},
838 {0x04F6, 0x04F6, 0x04F6}, {0x04F7, 0x04F7, 0x04F7},
839 {0x04F8, 0x04F9, 0x042B}, {0x04F8, 0x04F9, 0x042B},
840 {0x04FA, 0x04FA, 0x04FA}, {0x04FB, 0x04FB, 0x04FB},
841 {0x04FC, 0x04FC, 0x04FC}, {0x04FD, 0x04FD, 0x04FD},
842 {0x04FE, 0x04FE, 0x04FE}, {0x04FF, 0x04FF, 0x04FF}};
843
844 static const MY_UNICASE_CHARACTER plane05[] = {
845 {0x0500, 0x0500, 0x0500}, {0x0501, 0x0501, 0x0501},
846 {0x0502, 0x0502, 0x0502}, {0x0503, 0x0503, 0x0503},
847 {0x0504, 0x0504, 0x0504}, {0x0505, 0x0505, 0x0505},
848 {0x0506, 0x0506, 0x0506}, {0x0507, 0x0507, 0x0507},
849 {0x0508, 0x0508, 0x0508}, {0x0509, 0x0509, 0x0509},
850 {0x050A, 0x050A, 0x050A}, {0x050B, 0x050B, 0x050B},
851 {0x050C, 0x050C, 0x050C}, {0x050D, 0x050D, 0x050D},
852 {0x050E, 0x050E, 0x050E}, {0x050F, 0x050F, 0x050F},
853 {0x0510, 0x0510, 0x0510}, {0x0511, 0x0511, 0x0511},
854 {0x0512, 0x0512, 0x0512}, {0x0513, 0x0513, 0x0513},
855 {0x0514, 0x0514, 0x0514}, {0x0515, 0x0515, 0x0515},
856 {0x0516, 0x0516, 0x0516}, {0x0517, 0x0517, 0x0517},
857 {0x0518, 0x0518, 0x0518}, {0x0519, 0x0519, 0x0519},
858 {0x051A, 0x051A, 0x051A}, {0x051B, 0x051B, 0x051B},
859 {0x051C, 0x051C, 0x051C}, {0x051D, 0x051D, 0x051D},
860 {0x051E, 0x051E, 0x051E}, {0x051F, 0x051F, 0x051F},
861 {0x0520, 0x0520, 0x0520}, {0x0521, 0x0521, 0x0521},
862 {0x0522, 0x0522, 0x0522}, {0x0523, 0x0523, 0x0523},
863 {0x0524, 0x0524, 0x0524}, {0x0525, 0x0525, 0x0525},
864 {0x0526, 0x0526, 0x0526}, {0x0527, 0x0527, 0x0527},
865 {0x0528, 0x0528, 0x0528}, {0x0529, 0x0529, 0x0529},
866 {0x052A, 0x052A, 0x052A}, {0x052B, 0x052B, 0x052B},
867 {0x052C, 0x052C, 0x052C}, {0x052D, 0x052D, 0x052D},
868 {0x052E, 0x052E, 0x052E}, {0x052F, 0x052F, 0x052F},
869 {0x0530, 0x0530, 0x0530}, {0x0531, 0x0561, 0x0531},
870 {0x0532, 0x0562, 0x0532}, {0x0533, 0x0563, 0x0533},
871 {0x0534, 0x0564, 0x0534}, {0x0535, 0x0565, 0x0535},
872 {0x0536, 0x0566, 0x0536}, {0x0537, 0x0567, 0x0537},
873 {0x0538, 0x0568, 0x0538}, {0x0539, 0x0569, 0x0539},
874 {0x053A, 0x056A, 0x053A}, {0x053B, 0x056B, 0x053B},
875 {0x053C, 0x056C, 0x053C}, {0x053D, 0x056D, 0x053D},
876 {0x053E, 0x056E, 0x053E}, {0x053F, 0x056F, 0x053F},
877 {0x0540, 0x0570, 0x0540}, {0x0541, 0x0571, 0x0541},
878 {0x0542, 0x0572, 0x0542}, {0x0543, 0x0573, 0x0543},
879 {0x0544, 0x0574, 0x0544}, {0x0545, 0x0575, 0x0545},
880 {0x0546, 0x0576, 0x0546}, {0x0547, 0x0577, 0x0547},
881 {0x0548, 0x0578, 0x0548}, {0x0549, 0x0579, 0x0549},
882 {0x054A, 0x057A, 0x054A}, {0x054B, 0x057B, 0x054B},
883 {0x054C, 0x057C, 0x054C}, {0x054D, 0x057D, 0x054D},
884 {0x054E, 0x057E, 0x054E}, {0x054F, 0x057F, 0x054F},
885 {0x0550, 0x0580, 0x0550}, {0x0551, 0x0581, 0x0551},
886 {0x0552, 0x0582, 0x0552}, {0x0553, 0x0583, 0x0553},
887 {0x0554, 0x0584, 0x0554}, {0x0555, 0x0585, 0x0555},
888 {0x0556, 0x0586, 0x0556}, {0x0557, 0x0557, 0x0557},
889 {0x0558, 0x0558, 0x0558}, {0x0559, 0x0559, 0x0559},
890 {0x055A, 0x055A, 0x055A}, {0x055B, 0x055B, 0x055B},
891 {0x055C, 0x055C, 0x055C}, {0x055D, 0x055D, 0x055D},
892 {0x055E, 0x055E, 0x055E}, {0x055F, 0x055F, 0x055F},
893 {0x0560, 0x0560, 0x0560}, {0x0531, 0x0561, 0x0531},
894 {0x0532, 0x0562, 0x0532}, {0x0533, 0x0563, 0x0533},
895 {0x0534, 0x0564, 0x0534}, {0x0535, 0x0565, 0x0535},
896 {0x0536, 0x0566, 0x0536}, {0x0537, 0x0567, 0x0537},
897 {0x0538, 0x0568, 0x0538}, {0x0539, 0x0569, 0x0539},
898 {0x053A, 0x056A, 0x053A}, {0x053B, 0x056B, 0x053B},
899 {0x053C, 0x056C, 0x053C}, {0x053D, 0x056D, 0x053D},
900 {0x053E, 0x056E, 0x053E}, {0x053F, 0x056F, 0x053F},
901 {0x0540, 0x0570, 0x0540}, {0x0541, 0x0571, 0x0541},
902 {0x0542, 0x0572, 0x0542}, {0x0543, 0x0573, 0x0543},
903 {0x0544, 0x0574, 0x0544}, {0x0545, 0x0575, 0x0545},
904 {0x0546, 0x0576, 0x0546}, {0x0547, 0x0577, 0x0547},
905 {0x0548, 0x0578, 0x0548}, {0x0549, 0x0579, 0x0549},
906 {0x054A, 0x057A, 0x054A}, {0x054B, 0x057B, 0x054B},
907 {0x054C, 0x057C, 0x054C}, {0x054D, 0x057D, 0x054D},
908 {0x054E, 0x057E, 0x054E}, {0x054F, 0x057F, 0x054F},
909 {0x0550, 0x0580, 0x0550}, {0x0551, 0x0581, 0x0551},
910 {0x0552, 0x0582, 0x0552}, {0x0553, 0x0583, 0x0553},
911 {0x0554, 0x0584, 0x0554}, {0x0555, 0x0585, 0x0555},
912 {0x0556, 0x0586, 0x0556}, {0x0587, 0x0587, 0x0587},
913 {0x0588, 0x0588, 0x0588}, {0x0589, 0x0589, 0x0589},
914 {0x058A, 0x058A, 0x058A}, {0x058B, 0x058B, 0x058B},
915 {0x058C, 0x058C, 0x058C}, {0x058D, 0x058D, 0x058D},
916 {0x058E, 0x058E, 0x058E}, {0x058F, 0x058F, 0x058F},
917 {0x0590, 0x0590, 0x0590}, {0x0591, 0x0591, 0x0591},
918 {0x0592, 0x0592, 0x0592}, {0x0593, 0x0593, 0x0593},
919 {0x0594, 0x0594, 0x0594}, {0x0595, 0x0595, 0x0595},
920 {0x0596, 0x0596, 0x0596}, {0x0597, 0x0597, 0x0597},
921 {0x0598, 0x0598, 0x0598}, {0x0599, 0x0599, 0x0599},
922 {0x059A, 0x059A, 0x059A}, {0x059B, 0x059B, 0x059B},
923 {0x059C, 0x059C, 0x059C}, {0x059D, 0x059D, 0x059D},
924 {0x059E, 0x059E, 0x059E}, {0x059F, 0x059F, 0x059F},
925 {0x05A0, 0x05A0, 0x05A0}, {0x05A1, 0x05A1, 0x05A1},
926 {0x05A2, 0x05A2, 0x05A2}, {0x05A3, 0x05A3, 0x05A3},
927 {0x05A4, 0x05A4, 0x05A4}, {0x05A5, 0x05A5, 0x05A5},
928 {0x05A6, 0x05A6, 0x05A6}, {0x05A7, 0x05A7, 0x05A7},
929 {0x05A8, 0x05A8, 0x05A8}, {0x05A9, 0x05A9, 0x05A9},
930 {0x05AA, 0x05AA, 0x05AA}, {0x05AB, 0x05AB, 0x05AB},
931 {0x05AC, 0x05AC, 0x05AC}, {0x05AD, 0x05AD, 0x05AD},
932 {0x05AE, 0x05AE, 0x05AE}, {0x05AF, 0x05AF, 0x05AF},
933 {0x05B0, 0x05B0, 0x05B0}, {0x05B1, 0x05B1, 0x05B1},
934 {0x05B2, 0x05B2, 0x05B2}, {0x05B3, 0x05B3, 0x05B3},
935 {0x05B4, 0x05B4, 0x05B4}, {0x05B5, 0x05B5, 0x05B5},
936 {0x05B6, 0x05B6, 0x05B6}, {0x05B7, 0x05B7, 0x05B7},
937 {0x05B8, 0x05B8, 0x05B8}, {0x05B9, 0x05B9, 0x05B9},
938 {0x05BA, 0x05BA, 0x05BA}, {0x05BB, 0x05BB, 0x05BB},
939 {0x05BC, 0x05BC, 0x05BC}, {0x05BD, 0x05BD, 0x05BD},
940 {0x05BE, 0x05BE, 0x05BE}, {0x05BF, 0x05BF, 0x05BF},
941 {0x05C0, 0x05C0, 0x05C0}, {0x05C1, 0x05C1, 0x05C1},
942 {0x05C2, 0x05C2, 0x05C2}, {0x05C3, 0x05C3, 0x05C3},
943 {0x05C4, 0x05C4, 0x05C4}, {0x05C5, 0x05C5, 0x05C5},
944 {0x05C6, 0x05C6, 0x05C6}, {0x05C7, 0x05C7, 0x05C7},
945 {0x05C8, 0x05C8, 0x05C8}, {0x05C9, 0x05C9, 0x05C9},
946 {0x05CA, 0x05CA, 0x05CA}, {0x05CB, 0x05CB, 0x05CB},
947 {0x05CC, 0x05CC, 0x05CC}, {0x05CD, 0x05CD, 0x05CD},
948 {0x05CE, 0x05CE, 0x05CE}, {0x05CF, 0x05CF, 0x05CF},
949 {0x05D0, 0x05D0, 0x05D0}, {0x05D1, 0x05D1, 0x05D1},
950 {0x05D2, 0x05D2, 0x05D2}, {0x05D3, 0x05D3, 0x05D3},
951 {0x05D4, 0x05D4, 0x05D4}, {0x05D5, 0x05D5, 0x05D5},
952 {0x05D6, 0x05D6, 0x05D6}, {0x05D7, 0x05D7, 0x05D7},
953 {0x05D8, 0x05D8, 0x05D8}, {0x05D9, 0x05D9, 0x05D9},
954 {0x05DA, 0x05DA, 0x05DA}, {0x05DB, 0x05DB, 0x05DB},
955 {0x05DC, 0x05DC, 0x05DC}, {0x05DD, 0x05DD, 0x05DD},
956 {0x05DE, 0x05DE, 0x05DE}, {0x05DF, 0x05DF, 0x05DF},
957 {0x05E0, 0x05E0, 0x05E0}, {0x05E1, 0x05E1, 0x05E1},
958 {0x05E2, 0x05E2, 0x05E2}, {0x05E3, 0x05E3, 0x05E3},
959 {0x05E4, 0x05E4, 0x05E4}, {0x05E5, 0x05E5, 0x05E5},
960 {0x05E6, 0x05E6, 0x05E6}, {0x05E7, 0x05E7, 0x05E7},
961 {0x05E8, 0x05E8, 0x05E8}, {0x05E9, 0x05E9, 0x05E9},
962 {0x05EA, 0x05EA, 0x05EA}, {0x05EB, 0x05EB, 0x05EB},
963 {0x05EC, 0x05EC, 0x05EC}, {0x05ED, 0x05ED, 0x05ED},
964 {0x05EE, 0x05EE, 0x05EE}, {0x05EF, 0x05EF, 0x05EF},
965 {0x05F0, 0x05F0, 0x05F0}, {0x05F1, 0x05F1, 0x05F1},
966 {0x05F2, 0x05F2, 0x05F2}, {0x05F3, 0x05F3, 0x05F3},
967 {0x05F4, 0x05F4, 0x05F4}, {0x05F5, 0x05F5, 0x05F5},
968 {0x05F6, 0x05F6, 0x05F6}, {0x05F7, 0x05F7, 0x05F7},
969 {0x05F8, 0x05F8, 0x05F8}, {0x05F9, 0x05F9, 0x05F9},
970 {0x05FA, 0x05FA, 0x05FA}, {0x05FB, 0x05FB, 0x05FB},
971 {0x05FC, 0x05FC, 0x05FC}, {0x05FD, 0x05FD, 0x05FD},
972 {0x05FE, 0x05FE, 0x05FE}, {0x05FF, 0x05FF, 0x05FF}};
973
974 static const MY_UNICASE_CHARACTER plane1E[] = {
975 {0x1E00, 0x1E01, 0x0041}, {0x1E00, 0x1E01, 0x0041},
976 {0x1E02, 0x1E03, 0x0042}, {0x1E02, 0x1E03, 0x0042},
977 {0x1E04, 0x1E05, 0x0042}, {0x1E04, 0x1E05, 0x0042},
978 {0x1E06, 0x1E07, 0x0042}, {0x1E06, 0x1E07, 0x0042},
979 {0x1E08, 0x1E09, 0x0043}, {0x1E08, 0x1E09, 0x0043},
980 {0x1E0A, 0x1E0B, 0x0044}, {0x1E0A, 0x1E0B, 0x0044},
981 {0x1E0C, 0x1E0D, 0x0044}, {0x1E0C, 0x1E0D, 0x0044},
982 {0x1E0E, 0x1E0F, 0x0044}, {0x1E0E, 0x1E0F, 0x0044},
983 {0x1E10, 0x1E11, 0x0044}, {0x1E10, 0x1E11, 0x0044},
984 {0x1E12, 0x1E13, 0x0044}, {0x1E12, 0x1E13, 0x0044},
985 {0x1E14, 0x1E15, 0x0045}, {0x1E14, 0x1E15, 0x0045},
986 {0x1E16, 0x1E17, 0x0045}, {0x1E16, 0x1E17, 0x0045},
987 {0x1E18, 0x1E19, 0x0045}, {0x1E18, 0x1E19, 0x0045},
988 {0x1E1A, 0x1E1B, 0x0045}, {0x1E1A, 0x1E1B, 0x0045},
989 {0x1E1C, 0x1E1D, 0x0045}, {0x1E1C, 0x1E1D, 0x0045},
990 {0x1E1E, 0x1E1F, 0x0046}, {0x1E1E, 0x1E1F, 0x0046},
991 {0x1E20, 0x1E21, 0x0047}, {0x1E20, 0x1E21, 0x0047},
992 {0x1E22, 0x1E23, 0x0048}, {0x1E22, 0x1E23, 0x0048},
993 {0x1E24, 0x1E25, 0x0048}, {0x1E24, 0x1E25, 0x0048},
994 {0x1E26, 0x1E27, 0x0048}, {0x1E26, 0x1E27, 0x0048},
995 {0x1E28, 0x1E29, 0x0048}, {0x1E28, 0x1E29, 0x0048},
996 {0x1E2A, 0x1E2B, 0x0048}, {0x1E2A, 0x1E2B, 0x0048},
997 {0x1E2C, 0x1E2D, 0x0049}, {0x1E2C, 0x1E2D, 0x0049},
998 {0x1E2E, 0x1E2F, 0x0049}, {0x1E2E, 0x1E2F, 0x0049},
999 {0x1E30, 0x1E31, 0x004B}, {0x1E30, 0x1E31, 0x004B},
1000 {0x1E32, 0x1E33, 0x004B}, {0x1E32, 0x1E33, 0x004B},
1001 {0x1E34, 0x1E35, 0x004B}, {0x1E34, 0x1E35, 0x004B},
1002 {0x1E36, 0x1E37, 0x004C}, {0x1E36, 0x1E37, 0x004C},
1003 {0x1E38, 0x1E39, 0x004C}, {0x1E38, 0x1E39, 0x004C},
1004 {0x1E3A, 0x1E3B, 0x004C}, {0x1E3A, 0x1E3B, 0x004C},
1005 {0x1E3C, 0x1E3D, 0x004C}, {0x1E3C, 0x1E3D, 0x004C},
1006 {0x1E3E, 0x1E3F, 0x004D}, {0x1E3E, 0x1E3F, 0x004D},
1007 {0x1E40, 0x1E41, 0x004D}, {0x1E40, 0x1E41, 0x004D},
1008 {0x1E42, 0x1E43, 0x004D}, {0x1E42, 0x1E43, 0x004D},
1009 {0x1E44, 0x1E45, 0x004E}, {0x1E44, 0x1E45, 0x004E},
1010 {0x1E46, 0x1E47, 0x004E}, {0x1E46, 0x1E47, 0x004E},
1011 {0x1E48, 0x1E49, 0x004E}, {0x1E48, 0x1E49, 0x004E},
1012 {0x1E4A, 0x1E4B, 0x004E}, {0x1E4A, 0x1E4B, 0x004E},
1013 {0x1E4C, 0x1E4D, 0x004F}, {0x1E4C, 0x1E4D, 0x004F},
1014 {0x1E4E, 0x1E4F, 0x004F}, {0x1E4E, 0x1E4F, 0x004F},
1015 {0x1E50, 0x1E51, 0x004F}, {0x1E50, 0x1E51, 0x004F},
1016 {0x1E52, 0x1E53, 0x004F}, {0x1E52, 0x1E53, 0x004F},
1017 {0x1E54, 0x1E55, 0x0050}, {0x1E54, 0x1E55, 0x0050},
1018 {0x1E56, 0x1E57, 0x0050}, {0x1E56, 0x1E57, 0x0050},
1019 {0x1E58, 0x1E59, 0x0052}, {0x1E58, 0x1E59, 0x0052},
1020 {0x1E5A, 0x1E5B, 0x0052}, {0x1E5A, 0x1E5B, 0x0052},
1021 {0x1E5C, 0x1E5D, 0x0052}, {0x1E5C, 0x1E5D, 0x0052},
1022 {0x1E5E, 0x1E5F, 0x0052}, {0x1E5E, 0x1E5F, 0x0052},
1023 {0x1E60, 0x1E61, 0x0053}, {0x1E60, 0x1E61, 0x0053},
1024 {0x1E62, 0x1E63, 0x0053}, {0x1E62, 0x1E63, 0x0053},
1025 {0x1E64, 0x1E65, 0x0053}, {0x1E64, 0x1E65, 0x0053},
1026 {0x1E66, 0x1E67, 0x0053}, {0x1E66, 0x1E67, 0x0053},
1027 {0x1E68, 0x1E69, 0x0053}, {0x1E68, 0x1E69, 0x0053},
1028 {0x1E6A, 0x1E6B, 0x0054}, {0x1E6A, 0x1E6B, 0x0054},
1029 {0x1E6C, 0x1E6D, 0x0054}, {0x1E6C, 0x1E6D, 0x0054},
1030 {0x1E6E, 0x1E6F, 0x0054}, {0x1E6E, 0x1E6F, 0x0054},
1031 {0x1E70, 0x1E71, 0x0054}, {0x1E70, 0x1E71, 0x0054},
1032 {0x1E72, 0x1E73, 0x0055}, {0x1E72, 0x1E73, 0x0055},
1033 {0x1E74, 0x1E75, 0x0055}, {0x1E74, 0x1E75, 0x0055},
1034 {0x1E76, 0x1E77, 0x0055}, {0x1E76, 0x1E77, 0x0055},
1035 {0x1E78, 0x1E79, 0x0055}, {0x1E78, 0x1E79, 0x0055},
1036 {0x1E7A, 0x1E7B, 0x0055}, {0x1E7A, 0x1E7B, 0x0055},
1037 {0x1E7C, 0x1E7D, 0x0056}, {0x1E7C, 0x1E7D, 0x0056},
1038 {0x1E7E, 0x1E7F, 0x0056}, {0x1E7E, 0x1E7F, 0x0056},
1039 {0x1E80, 0x1E81, 0x0057}, {0x1E80, 0x1E81, 0x0057},
1040 {0x1E82, 0x1E83, 0x0057}, {0x1E82, 0x1E83, 0x0057},
1041 {0x1E84, 0x1E85, 0x0057}, {0x1E84, 0x1E85, 0x0057},
1042 {0x1E86, 0x1E87, 0x0057}, {0x1E86, 0x1E87, 0x0057},
1043 {0x1E88, 0x1E89, 0x0057}, {0x1E88, 0x1E89, 0x0057},
1044 {0x1E8A, 0x1E8B, 0x0058}, {0x1E8A, 0x1E8B, 0x0058},
1045 {0x1E8C, 0x1E8D, 0x0058}, {0x1E8C, 0x1E8D, 0x0058},
1046 {0x1E8E, 0x1E8F, 0x0059}, {0x1E8E, 0x1E8F, 0x0059},
1047 {0x1E90, 0x1E91, 0x005A}, {0x1E90, 0x1E91, 0x005A},
1048 {0x1E92, 0x1E93, 0x005A}, {0x1E92, 0x1E93, 0x005A},
1049 {0x1E94, 0x1E95, 0x005A}, {0x1E94, 0x1E95, 0x005A},
1050 {0x1E96, 0x1E96, 0x0048}, {0x1E97, 0x1E97, 0x0054},
1051 {0x1E98, 0x1E98, 0x0057}, {0x1E99, 0x1E99, 0x0059},
1052 {0x1E9A, 0x1E9A, 0x1E9A}, {0x1E60, 0x1E9B, 0x0053},
1053 {0x1E9C, 0x1E9C, 0x1E9C}, {0x1E9D, 0x1E9D, 0x1E9D},
1054 {0x1E9E, 0x1E9E, 0x1E9E}, {0x1E9F, 0x1E9F, 0x1E9F},
1055 {0x1EA0, 0x1EA1, 0x0041}, {0x1EA0, 0x1EA1, 0x0041},
1056 {0x1EA2, 0x1EA3, 0x0041}, {0x1EA2, 0x1EA3, 0x0041},
1057 {0x1EA4, 0x1EA5, 0x0041}, {0x1EA4, 0x1EA5, 0x0041},
1058 {0x1EA6, 0x1EA7, 0x0041}, {0x1EA6, 0x1EA7, 0x0041},
1059 {0x1EA8, 0x1EA9, 0x0041}, {0x1EA8, 0x1EA9, 0x0041},
1060 {0x1EAA, 0x1EAB, 0x0041}, {0x1EAA, 0x1EAB, 0x0041},
1061 {0x1EAC, 0x1EAD, 0x0041}, {0x1EAC, 0x1EAD, 0x0041},
1062 {0x1EAE, 0x1EAF, 0x0041}, {0x1EAE, 0x1EAF, 0x0041},
1063 {0x1EB0, 0x1EB1, 0x0041}, {0x1EB0, 0x1EB1, 0x0041},
1064 {0x1EB2, 0x1EB3, 0x0041}, {0x1EB2, 0x1EB3, 0x0041},
1065 {0x1EB4, 0x1EB5, 0x0041}, {0x1EB4, 0x1EB5, 0x0041},
1066 {0x1EB6, 0x1EB7, 0x0041}, {0x1EB6, 0x1EB7, 0x0041},
1067 {0x1EB8, 0x1EB9, 0x0045}, {0x1EB8, 0x1EB9, 0x0045},
1068 {0x1EBA, 0x1EBB, 0x0045}, {0x1EBA, 0x1EBB, 0x0045},
1069 {0x1EBC, 0x1EBD, 0x0045}, {0x1EBC, 0x1EBD, 0x0045},
1070 {0x1EBE, 0x1EBF, 0x0045}, {0x1EBE, 0x1EBF, 0x0045},
1071 {0x1EC0, 0x1EC1, 0x0045}, {0x1EC0, 0x1EC1, 0x0045},
1072 {0x1EC2, 0x1EC3, 0x0045}, {0x1EC2, 0x1EC3, 0x0045},
1073 {0x1EC4, 0x1EC5, 0x0045}, {0x1EC4, 0x1EC5, 0x0045},
1074 {0x1EC6, 0x1EC7, 0x0045}, {0x1EC6, 0x1EC7, 0x0045},
1075 {0x1EC8, 0x1EC9, 0x0049}, {0x1EC8, 0x1EC9, 0x0049},
1076 {0x1ECA, 0x1ECB, 0x0049}, {0x1ECA, 0x1ECB, 0x0049},
1077 {0x1ECC, 0x1ECD, 0x004F}, {0x1ECC, 0x1ECD, 0x004F},
1078 {0x1ECE, 0x1ECF, 0x004F}, {0x1ECE, 0x1ECF, 0x004F},
1079 {0x1ED0, 0x1ED1, 0x004F}, {0x1ED0, 0x1ED1, 0x004F},
1080 {0x1ED2, 0x1ED3, 0x004F}, {0x1ED2, 0x1ED3, 0x004F},
1081 {0x1ED4, 0x1ED5, 0x004F}, {0x1ED4, 0x1ED5, 0x004F},
1082 {0x1ED6, 0x1ED7, 0x004F}, {0x1ED6, 0x1ED7, 0x004F},
1083 {0x1ED8, 0x1ED9, 0x004F}, {0x1ED8, 0x1ED9, 0x004F},
1084 {0x1EDA, 0x1EDB, 0x004F}, {0x1EDA, 0x1EDB, 0x004F},
1085 {0x1EDC, 0x1EDD, 0x004F}, {0x1EDC, 0x1EDD, 0x004F},
1086 {0x1EDE, 0x1EDF, 0x004F}, {0x1EDE, 0x1EDF, 0x004F},
1087 {0x1EE0, 0x1EE1, 0x004F}, {0x1EE0, 0x1EE1, 0x004F},
1088 {0x1EE2, 0x1EE3, 0x004F}, {0x1EE2, 0x1EE3, 0x004F},
1089 {0x1EE4, 0x1EE5, 0x0055}, {0x1EE4, 0x1EE5, 0x0055},
1090 {0x1EE6, 0x1EE7, 0x0055}, {0x1EE6, 0x1EE7, 0x0055},
1091 {0x1EE8, 0x1EE9, 0x0055}, {0x1EE8, 0x1EE9, 0x0055},
1092 {0x1EEA, 0x1EEB, 0x0055}, {0x1EEA, 0x1EEB, 0x0055},
1093 {0x1EEC, 0x1EED, 0x0055}, {0x1EEC, 0x1EED, 0x0055},
1094 {0x1EEE, 0x1EEF, 0x0055}, {0x1EEE, 0x1EEF, 0x0055},
1095 {0x1EF0, 0x1EF1, 0x0055}, {0x1EF0, 0x1EF1, 0x0055},
1096 {0x1EF2, 0x1EF3, 0x0059}, {0x1EF2, 0x1EF3, 0x0059},
1097 {0x1EF4, 0x1EF5, 0x0059}, {0x1EF4, 0x1EF5, 0x0059},
1098 {0x1EF6, 0x1EF7, 0x0059}, {0x1EF6, 0x1EF7, 0x0059},
1099 {0x1EF8, 0x1EF9, 0x0059}, {0x1EF8, 0x1EF9, 0x0059},
1100 {0x1EFA, 0x1EFA, 0x1EFA}, {0x1EFB, 0x1EFB, 0x1EFB},
1101 {0x1EFC, 0x1EFC, 0x1EFC}, {0x1EFD, 0x1EFD, 0x1EFD},
1102 {0x1EFE, 0x1EFE, 0x1EFE}, {0x1EFF, 0x1EFF, 0x1EFF}};
1103
1104 static const MY_UNICASE_CHARACTER plane1F[] = {
1105 {0x1F08, 0x1F00, 0x0391}, {0x1F09, 0x1F01, 0x0391},
1106 {0x1F0A, 0x1F02, 0x0391}, {0x1F0B, 0x1F03, 0x0391},
1107 {0x1F0C, 0x1F04, 0x0391}, {0x1F0D, 0x1F05, 0x0391},
1108 {0x1F0E, 0x1F06, 0x0391}, {0x1F0F, 0x1F07, 0x0391},
1109 {0x1F08, 0x1F00, 0x0391}, {0x1F09, 0x1F01, 0x0391},
1110 {0x1F0A, 0x1F02, 0x0391}, {0x1F0B, 0x1F03, 0x0391},
1111 {0x1F0C, 0x1F04, 0x0391}, {0x1F0D, 0x1F05, 0x0391},
1112 {0x1F0E, 0x1F06, 0x0391}, {0x1F0F, 0x1F07, 0x0391},
1113 {0x1F18, 0x1F10, 0x0395}, {0x1F19, 0x1F11, 0x0395},
1114 {0x1F1A, 0x1F12, 0x0395}, {0x1F1B, 0x1F13, 0x0395},
1115 {0x1F1C, 0x1F14, 0x0395}, {0x1F1D, 0x1F15, 0x0395},
1116 {0x1F16, 0x1F16, 0x1F16}, {0x1F17, 0x1F17, 0x1F17},
1117 {0x1F18, 0x1F10, 0x0395}, {0x1F19, 0x1F11, 0x0395},
1118 {0x1F1A, 0x1F12, 0x0395}, {0x1F1B, 0x1F13, 0x0395},
1119 {0x1F1C, 0x1F14, 0x0395}, {0x1F1D, 0x1F15, 0x0395},
1120 {0x1F1E, 0x1F1E, 0x1F1E}, {0x1F1F, 0x1F1F, 0x1F1F},
1121 {0x1F28, 0x1F20, 0x0397}, {0x1F29, 0x1F21, 0x0397},
1122 {0x1F2A, 0x1F22, 0x0397}, {0x1F2B, 0x1F23, 0x0397},
1123 {0x1F2C, 0x1F24, 0x0397}, {0x1F2D, 0x1F25, 0x0397},
1124 {0x1F2E, 0x1F26, 0x0397}, {0x1F2F, 0x1F27, 0x0397},
1125 {0x1F28, 0x1F20, 0x0397}, {0x1F29, 0x1F21, 0x0397},
1126 {0x1F2A, 0x1F22, 0x0397}, {0x1F2B, 0x1F23, 0x0397},
1127 {0x1F2C, 0x1F24, 0x0397}, {0x1F2D, 0x1F25, 0x0397},
1128 {0x1F2E, 0x1F26, 0x0397}, {0x1F2F, 0x1F27, 0x0397},
1129 {0x1F38, 0x1F30, 0x0399}, {0x1F39, 0x1F31, 0x0399},
1130 {0x1F3A, 0x1F32, 0x0399}, {0x1F3B, 0x1F33, 0x0399},
1131 {0x1F3C, 0x1F34, 0x0399}, {0x1F3D, 0x1F35, 0x0399},
1132 {0x1F3E, 0x1F36, 0x0399}, {0x1F3F, 0x1F37, 0x0399},
1133 {0x1F38, 0x1F30, 0x0399}, {0x1F39, 0x1F31, 0x0399},
1134 {0x1F3A, 0x1F32, 0x0399}, {0x1F3B, 0x1F33, 0x0399},
1135 {0x1F3C, 0x1F34, 0x0399}, {0x1F3D, 0x1F35, 0x0399},
1136 {0x1F3E, 0x1F36, 0x0399}, {0x1F3F, 0x1F37, 0x0399},
1137 {0x1F48, 0x1F40, 0x039F}, {0x1F49, 0x1F41, 0x039F},
1138 {0x1F4A, 0x1F42, 0x039F}, {0x1F4B, 0x1F43, 0x039F},
1139 {0x1F4C, 0x1F44, 0x039F}, {0x1F4D, 0x1F45, 0x039F},
1140 {0x1F46, 0x1F46, 0x1F46}, {0x1F47, 0x1F47, 0x1F47},
1141 {0x1F48, 0x1F40, 0x039F}, {0x1F49, 0x1F41, 0x039F},
1142 {0x1F4A, 0x1F42, 0x039F}, {0x1F4B, 0x1F43, 0x039F},
1143 {0x1F4C, 0x1F44, 0x039F}, {0x1F4D, 0x1F45, 0x039F},
1144 {0x1F4E, 0x1F4E, 0x1F4E}, {0x1F4F, 0x1F4F, 0x1F4F},
1145 {0x1F50, 0x1F50, 0x03A5}, {0x1F59, 0x1F51, 0x03A5},
1146 {0x1F52, 0x1F52, 0x03A5}, {0x1F5B, 0x1F53, 0x03A5},
1147 {0x1F54, 0x1F54, 0x03A5}, {0x1F5D, 0x1F55, 0x03A5},
1148 {0x1F56, 0x1F56, 0x03A5}, {0x1F5F, 0x1F57, 0x03A5},
1149 {0x1F58, 0x1F58, 0x1F58}, {0x1F59, 0x1F51, 0x03A5},
1150 {0x1F5A, 0x1F5A, 0x1F5A}, {0x1F5B, 0x1F53, 0x03A5},
1151 {0x1F5C, 0x1F5C, 0x1F5C}, {0x1F5D, 0x1F55, 0x03A5},
1152 {0x1F5E, 0x1F5E, 0x1F5E}, {0x1F5F, 0x1F57, 0x03A5},
1153 {0x1F68, 0x1F60, 0x03A9}, {0x1F69, 0x1F61, 0x03A9},
1154 {0x1F6A, 0x1F62, 0x03A9}, {0x1F6B, 0x1F63, 0x03A9},
1155 {0x1F6C, 0x1F64, 0x03A9}, {0x1F6D, 0x1F65, 0x03A9},
1156 {0x1F6E, 0x1F66, 0x03A9}, {0x1F6F, 0x1F67, 0x03A9},
1157 {0x1F68, 0x1F60, 0x03A9}, {0x1F69, 0x1F61, 0x03A9},
1158 {0x1F6A, 0x1F62, 0x03A9}, {0x1F6B, 0x1F63, 0x03A9},
1159 {0x1F6C, 0x1F64, 0x03A9}, {0x1F6D, 0x1F65, 0x03A9},
1160 {0x1F6E, 0x1F66, 0x03A9}, {0x1F6F, 0x1F67, 0x03A9},
1161 {0x1FBA, 0x1F70, 0x0391}, {0x1FBB, 0x1F71, 0x1FBB},
1162 {0x1FC8, 0x1F72, 0x0395}, {0x1FC9, 0x1F73, 0x1FC9},
1163 {0x1FCA, 0x1F74, 0x0397}, {0x1FCB, 0x1F75, 0x1FCB},
1164 {0x1FDA, 0x1F76, 0x0399}, {0x1FDB, 0x1F77, 0x1FDB},
1165 {0x1FF8, 0x1F78, 0x039F}, {0x1FF9, 0x1F79, 0x1FF9},
1166 {0x1FEA, 0x1F7A, 0x03A5}, {0x1FEB, 0x1F7B, 0x1FEB},
1167 {0x1FFA, 0x1F7C, 0x03A9}, {0x1FFB, 0x1F7D, 0x1FFB},
1168 {0x1F7E, 0x1F7E, 0x1F7E}, {0x1F7F, 0x1F7F, 0x1F7F},
1169 {0x1F88, 0x1F80, 0x0391}, {0x1F89, 0x1F81, 0x0391},
1170 {0x1F8A, 0x1F82, 0x0391}, {0x1F8B, 0x1F83, 0x0391},
1171 {0x1F8C, 0x1F84, 0x0391}, {0x1F8D, 0x1F85, 0x0391},
1172 {0x1F8E, 0x1F86, 0x0391}, {0x1F8F, 0x1F87, 0x0391},
1173 {0x1F88, 0x1F80, 0x0391}, {0x1F89, 0x1F81, 0x0391},
1174 {0x1F8A, 0x1F82, 0x0391}, {0x1F8B, 0x1F83, 0x0391},
1175 {0x1F8C, 0x1F84, 0x0391}, {0x1F8D, 0x1F85, 0x0391},
1176 {0x1F8E, 0x1F86, 0x0391}, {0x1F8F, 0x1F87, 0x0391},
1177 {0x1F98, 0x1F90, 0x0397}, {0x1F99, 0x1F91, 0x0397},
1178 {0x1F9A, 0x1F92, 0x0397}, {0x1F9B, 0x1F93, 0x0397},
1179 {0x1F9C, 0x1F94, 0x0397}, {0x1F9D, 0x1F95, 0x0397},
1180 {0x1F9E, 0x1F96, 0x0397}, {0x1F9F, 0x1F97, 0x0397},
1181 {0x1F98, 0x1F90, 0x0397}, {0x1F99, 0x1F91, 0x0397},
1182 {0x1F9A, 0x1F92, 0x0397}, {0x1F9B, 0x1F93, 0x0397},
1183 {0x1F9C, 0x1F94, 0x0397}, {0x1F9D, 0x1F95, 0x0397},
1184 {0x1F9E, 0x1F96, 0x0397}, {0x1F9F, 0x1F97, 0x0397},
1185 {0x1FA8, 0x1FA0, 0x03A9}, {0x1FA9, 0x1FA1, 0x03A9},
1186 {0x1FAA, 0x1FA2, 0x03A9}, {0x1FAB, 0x1FA3, 0x03A9},
1187 {0x1FAC, 0x1FA4, 0x03A9}, {0x1FAD, 0x1FA5, 0x03A9},
1188 {0x1FAE, 0x1FA6, 0x03A9}, {0x1FAF, 0x1FA7, 0x03A9},
1189 {0x1FA8, 0x1FA0, 0x03A9}, {0x1FA9, 0x1FA1, 0x03A9},
1190 {0x1FAA, 0x1FA2, 0x03A9}, {0x1FAB, 0x1FA3, 0x03A9},
1191 {0x1FAC, 0x1FA4, 0x03A9}, {0x1FAD, 0x1FA5, 0x03A9},
1192 {0x1FAE, 0x1FA6, 0x03A9}, {0x1FAF, 0x1FA7, 0x03A9},
1193 {0x1FB8, 0x1FB0, 0x0391}, {0x1FB9, 0x1FB1, 0x0391},
1194 {0x1FB2, 0x1FB2, 0x0391}, {0x1FBC, 0x1FB3, 0x0391},
1195 {0x1FB4, 0x1FB4, 0x0391}, {0x1FB5, 0x1FB5, 0x1FB5},
1196 {0x1FB6, 0x1FB6, 0x0391}, {0x1FB7, 0x1FB7, 0x0391},
1197 {0x1FB8, 0x1FB0, 0x0391}, {0x1FB9, 0x1FB1, 0x0391},
1198 {0x1FBA, 0x1F70, 0x0391}, {0x1FBB, 0x1F71, 0x1FBB},
1199 {0x1FBC, 0x1FB3, 0x0391}, {0x1FBD, 0x1FBD, 0x1FBD},
1200 {0x0399, 0x1FBE, 0x0399}, {0x1FBF, 0x1FBF, 0x1FBF},
1201 {0x1FC0, 0x1FC0, 0x1FC0}, {0x1FC1, 0x1FC1, 0x1FC1},
1202 {0x1FC2, 0x1FC2, 0x0397}, {0x1FCC, 0x1FC3, 0x0397},
1203 {0x1FC4, 0x1FC4, 0x0397}, {0x1FC5, 0x1FC5, 0x1FC5},
1204 {0x1FC6, 0x1FC6, 0x0397}, {0x1FC7, 0x1FC7, 0x0397},
1205 {0x1FC8, 0x1F72, 0x0395}, {0x1FC9, 0x1F73, 0x1FC9},
1206 {0x1FCA, 0x1F74, 0x0397}, {0x1FCB, 0x1F75, 0x1FCB},
1207 {0x1FCC, 0x1FC3, 0x0397}, {0x1FCD, 0x1FCD, 0x1FCD},
1208 {0x1FCE, 0x1FCE, 0x1FCE}, {0x1FCF, 0x1FCF, 0x1FCF},
1209 {0x1FD8, 0x1FD0, 0x0399}, {0x1FD9, 0x1FD1, 0x0399},
1210 {0x1FD2, 0x1FD2, 0x0399}, {0x1FD3, 0x1FD3, 0x1FD3},
1211 {0x1FD4, 0x1FD4, 0x1FD4}, {0x1FD5, 0x1FD5, 0x1FD5},
1212 {0x1FD6, 0x1FD6, 0x0399}, {0x1FD7, 0x1FD7, 0x0399},
1213 {0x1FD8, 0x1FD0, 0x0399}, {0x1FD9, 0x1FD1, 0x0399},
1214 {0x1FDA, 0x1F76, 0x0399}, {0x1FDB, 0x1F77, 0x1FDB},
1215 {0x1FDC, 0x1FDC, 0x1FDC}, {0x1FDD, 0x1FDD, 0x1FDD},
1216 {0x1FDE, 0x1FDE, 0x1FDE}, {0x1FDF, 0x1FDF, 0x1FDF},
1217 {0x1FE8, 0x1FE0, 0x03A5}, {0x1FE9, 0x1FE1, 0x03A5},
1218 {0x1FE2, 0x1FE2, 0x03A5}, {0x1FE3, 0x1FE3, 0x1FE3},
1219 {0x1FE4, 0x1FE4, 0x03A1}, {0x1FEC, 0x1FE5, 0x03A1},
1220 {0x1FE6, 0x1FE6, 0x03A5}, {0x1FE7, 0x1FE7, 0x03A5},
1221 {0x1FE8, 0x1FE0, 0x03A5}, {0x1FE9, 0x1FE1, 0x03A5},
1222 {0x1FEA, 0x1F7A, 0x03A5}, {0x1FEB, 0x1F7B, 0x1FEB},
1223 {0x1FEC, 0x1FE5, 0x03A1}, {0x1FED, 0x1FED, 0x1FED},
1224 {0x1FEE, 0x1FEE, 0x1FEE}, {0x1FEF, 0x1FEF, 0x1FEF},
1225 {0x1FF0, 0x1FF0, 0x1FF0}, {0x1FF1, 0x1FF1, 0x1FF1},
1226 {0x1FF2, 0x1FF2, 0x03A9}, {0x1FFC, 0x1FF3, 0x03A9},
1227 {0x1FF4, 0x1FF4, 0x03A9}, {0x1FF5, 0x1FF5, 0x1FF5},
1228 {0x1FF6, 0x1FF6, 0x03A9}, {0x1FF7, 0x1FF7, 0x03A9},
1229 {0x1FF8, 0x1F78, 0x039F}, {0x1FF9, 0x1F79, 0x1FF9},
1230 {0x1FFA, 0x1F7C, 0x03A9}, {0x1FFB, 0x1F7D, 0x1FFB},
1231 {0x1FFC, 0x1FF3, 0x03A9}, {0x1FFD, 0x1FFD, 0x1FFD},
1232 {0x1FFE, 0x1FFE, 0x1FFE}, {0x1FFF, 0x1FFF, 0x1FFF}};
1233
1234 static const MY_UNICASE_CHARACTER plane21[] = {
1235 {0x2100, 0x2100, 0x2100}, {0x2101, 0x2101, 0x2101},
1236 {0x2102, 0x2102, 0x2102}, {0x2103, 0x2103, 0x2103},
1237 {0x2104, 0x2104, 0x2104}, {0x2105, 0x2105, 0x2105},
1238 {0x2106, 0x2106, 0x2106}, {0x2107, 0x2107, 0x2107},
1239 {0x2108, 0x2108, 0x2108}, {0x2109, 0x2109, 0x2109},
1240 {0x210A, 0x210A, 0x210A}, {0x210B, 0x210B, 0x210B},
1241 {0x210C, 0x210C, 0x210C}, {0x210D, 0x210D, 0x210D},
1242 {0x210E, 0x210E, 0x210E}, {0x210F, 0x210F, 0x210F},
1243 {0x2110, 0x2110, 0x2110}, {0x2111, 0x2111, 0x2111},
1244 {0x2112, 0x2112, 0x2112}, {0x2113, 0x2113, 0x2113},
1245 {0x2114, 0x2114, 0x2114}, {0x2115, 0x2115, 0x2115},
1246 {0x2116, 0x2116, 0x2116}, {0x2117, 0x2117, 0x2117},
1247 {0x2118, 0x2118, 0x2118}, {0x2119, 0x2119, 0x2119},
1248 {0x211A, 0x211A, 0x211A}, {0x211B, 0x211B, 0x211B},
1249 {0x211C, 0x211C, 0x211C}, {0x211D, 0x211D, 0x211D},
1250 {0x211E, 0x211E, 0x211E}, {0x211F, 0x211F, 0x211F},
1251 {0x2120, 0x2120, 0x2120}, {0x2121, 0x2121, 0x2121},
1252 {0x2122, 0x2122, 0x2122}, {0x2123, 0x2123, 0x2123},
1253 {0x2124, 0x2124, 0x2124}, {0x2125, 0x2125, 0x2125},
1254 {0x2126, 0x03C9, 0x2126}, {0x2127, 0x2127, 0x2127},
1255 {0x2128, 0x2128, 0x2128}, {0x2129, 0x2129, 0x2129},
1256 {0x212A, 0x006B, 0x212A}, {0x212B, 0x00E5, 0x212B},
1257 {0x212C, 0x212C, 0x212C}, {0x212D, 0x212D, 0x212D},
1258 {0x212E, 0x212E, 0x212E}, {0x212F, 0x212F, 0x212F},
1259 {0x2130, 0x2130, 0x2130}, {0x2131, 0x2131, 0x2131},
1260 {0x2132, 0x2132, 0x2132}, {0x2133, 0x2133, 0x2133},
1261 {0x2134, 0x2134, 0x2134}, {0x2135, 0x2135, 0x2135},
1262 {0x2136, 0x2136, 0x2136}, {0x2137, 0x2137, 0x2137},
1263 {0x2138, 0x2138, 0x2138}, {0x2139, 0x2139, 0x2139},
1264 {0x213A, 0x213A, 0x213A}, {0x213B, 0x213B, 0x213B},
1265 {0x213C, 0x213C, 0x213C}, {0x213D, 0x213D, 0x213D},
1266 {0x213E, 0x213E, 0x213E}, {0x213F, 0x213F, 0x213F},
1267 {0x2140, 0x2140, 0x2140}, {0x2141, 0x2141, 0x2141},
1268 {0x2142, 0x2142, 0x2142}, {0x2143, 0x2143, 0x2143},
1269 {0x2144, 0x2144, 0x2144}, {0x2145, 0x2145, 0x2145},
1270 {0x2146, 0x2146, 0x2146}, {0x2147, 0x2147, 0x2147},
1271 {0x2148, 0x2148, 0x2148}, {0x2149, 0x2149, 0x2149},
1272 {0x214A, 0x214A, 0x214A}, {0x214B, 0x214B, 0x214B},
1273 {0x214C, 0x214C, 0x214C}, {0x214D, 0x214D, 0x214D},
1274 {0x214E, 0x214E, 0x214E}, {0x214F, 0x214F, 0x214F},
1275 {0x2150, 0x2150, 0x2150}, {0x2151, 0x2151, 0x2151},
1276 {0x2152, 0x2152, 0x2152}, {0x2153, 0x2153, 0x2153},
1277 {0x2154, 0x2154, 0x2154}, {0x2155, 0x2155, 0x2155},
1278 {0x2156, 0x2156, 0x2156}, {0x2157, 0x2157, 0x2157},
1279 {0x2158, 0x2158, 0x2158}, {0x2159, 0x2159, 0x2159},
1280 {0x215A, 0x215A, 0x215A}, {0x215B, 0x215B, 0x215B},
1281 {0x215C, 0x215C, 0x215C}, {0x215D, 0x215D, 0x215D},
1282 {0x215E, 0x215E, 0x215E}, {0x215F, 0x215F, 0x215F},
1283 {0x2160, 0x2170, 0x2160}, {0x2161, 0x2171, 0x2161},
1284 {0x2162, 0x2172, 0x2162}, {0x2163, 0x2173, 0x2163},
1285 {0x2164, 0x2174, 0x2164}, {0x2165, 0x2175, 0x2165},
1286 {0x2166, 0x2176, 0x2166}, {0x2167, 0x2177, 0x2167},
1287 {0x2168, 0x2178, 0x2168}, {0x2169, 0x2179, 0x2169},
1288 {0x216A, 0x217A, 0x216A}, {0x216B, 0x217B, 0x216B},
1289 {0x216C, 0x217C, 0x216C}, {0x216D, 0x217D, 0x216D},
1290 {0x216E, 0x217E, 0x216E}, {0x216F, 0x217F, 0x216F},
1291 {0x2160, 0x2170, 0x2160}, {0x2161, 0x2171, 0x2161},
1292 {0x2162, 0x2172, 0x2162}, {0x2163, 0x2173, 0x2163},
1293 {0x2164, 0x2174, 0x2164}, {0x2165, 0x2175, 0x2165},
1294 {0x2166, 0x2176, 0x2166}, {0x2167, 0x2177, 0x2167},
1295 {0x2168, 0x2178, 0x2168}, {0x2169, 0x2179, 0x2169},
1296 {0x216A, 0x217A, 0x216A}, {0x216B, 0x217B, 0x216B},
1297 {0x216C, 0x217C, 0x216C}, {0x216D, 0x217D, 0x216D},
1298 {0x216E, 0x217E, 0x216E}, {0x216F, 0x217F, 0x216F},
1299 {0x2180, 0x2180, 0x2180}, {0x2181, 0x2181, 0x2181},
1300 {0x2182, 0x2182, 0x2182}, {0x2183, 0x2183, 0x2183},
1301 {0x2184, 0x2184, 0x2184}, {0x2185, 0x2185, 0x2185},
1302 {0x2186, 0x2186, 0x2186}, {0x2187, 0x2187, 0x2187},
1303 {0x2188, 0x2188, 0x2188}, {0x2189, 0x2189, 0x2189},
1304 {0x218A, 0x218A, 0x218A}, {0x218B, 0x218B, 0x218B},
1305 {0x218C, 0x218C, 0x218C}, {0x218D, 0x218D, 0x218D},
1306 {0x218E, 0x218E, 0x218E}, {0x218F, 0x218F, 0x218F},
1307 {0x2190, 0x2190, 0x2190}, {0x2191, 0x2191, 0x2191},
1308 {0x2192, 0x2192, 0x2192}, {0x2193, 0x2193, 0x2193},
1309 {0x2194, 0x2194, 0x2194}, {0x2195, 0x2195, 0x2195},
1310 {0x2196, 0x2196, 0x2196}, {0x2197, 0x2197, 0x2197},
1311 {0x2198, 0x2198, 0x2198}, {0x2199, 0x2199, 0x2199},
1312 {0x219A, 0x219A, 0x219A}, {0x219B, 0x219B, 0x219B},
1313 {0x219C, 0x219C, 0x219C}, {0x219D, 0x219D, 0x219D},
1314 {0x219E, 0x219E, 0x219E}, {0x219F, 0x219F, 0x219F},
1315 {0x21A0, 0x21A0, 0x21A0}, {0x21A1, 0x21A1, 0x21A1},
1316 {0x21A2, 0x21A2, 0x21A2}, {0x21A3, 0x21A3, 0x21A3},
1317 {0x21A4, 0x21A4, 0x21A4}, {0x21A5, 0x21A5, 0x21A5},
1318 {0x21A6, 0x21A6, 0x21A6}, {0x21A7, 0x21A7, 0x21A7},
1319 {0x21A8, 0x21A8, 0x21A8}, {0x21A9, 0x21A9, 0x21A9},
1320 {0x21AA, 0x21AA, 0x21AA}, {0x21AB, 0x21AB, 0x21AB},
1321 {0x21AC, 0x21AC, 0x21AC}, {0x21AD, 0x21AD, 0x21AD},
1322 {0x21AE, 0x21AE, 0x21AE}, {0x21AF, 0x21AF, 0x21AF},
1323 {0x21B0, 0x21B0, 0x21B0}, {0x21B1, 0x21B1, 0x21B1},
1324 {0x21B2, 0x21B2, 0x21B2}, {0x21B3, 0x21B3, 0x21B3},
1325 {0x21B4, 0x21B4, 0x21B4}, {0x21B5, 0x21B5, 0x21B5},
1326 {0x21B6, 0x21B6, 0x21B6}, {0x21B7, 0x21B7, 0x21B7},
1327 {0x21B8, 0x21B8, 0x21B8}, {0x21B9, 0x21B9, 0x21B9},
1328 {0x21BA, 0x21BA, 0x21BA}, {0x21BB, 0x21BB, 0x21BB},
1329 {0x21BC, 0x21BC, 0x21BC}, {0x21BD, 0x21BD, 0x21BD},
1330 {0x21BE, 0x21BE, 0x21BE}, {0x21BF, 0x21BF, 0x21BF},
1331 {0x21C0, 0x21C0, 0x21C0}, {0x21C1, 0x21C1, 0x21C1},
1332 {0x21C2, 0x21C2, 0x21C2}, {0x21C3, 0x21C3, 0x21C3},
1333 {0x21C4, 0x21C4, 0x21C4}, {0x21C5, 0x21C5, 0x21C5},
1334 {0x21C6, 0x21C6, 0x21C6}, {0x21C7, 0x21C7, 0x21C7},
1335 {0x21C8, 0x21C8, 0x21C8}, {0x21C9, 0x21C9, 0x21C9},
1336 {0x21CA, 0x21CA, 0x21CA}, {0x21CB, 0x21CB, 0x21CB},
1337 {0x21CC, 0x21CC, 0x21CC}, {0x21CD, 0x21CD, 0x21CD},
1338 {0x21CE, 0x21CE, 0x21CE}, {0x21CF, 0x21CF, 0x21CF},
1339 {0x21D0, 0x21D0, 0x21D0}, {0x21D1, 0x21D1, 0x21D1},
1340 {0x21D2, 0x21D2, 0x21D2}, {0x21D3, 0x21D3, 0x21D3},
1341 {0x21D4, 0x21D4, 0x21D4}, {0x21D5, 0x21D5, 0x21D5},
1342 {0x21D6, 0x21D6, 0x21D6}, {0x21D7, 0x21D7, 0x21D7},
1343 {0x21D8, 0x21D8, 0x21D8}, {0x21D9, 0x21D9, 0x21D9},
1344 {0x21DA, 0x21DA, 0x21DA}, {0x21DB, 0x21DB, 0x21DB},
1345 {0x21DC, 0x21DC, 0x21DC}, {0x21DD, 0x21DD, 0x21DD},
1346 {0x21DE, 0x21DE, 0x21DE}, {0x21DF, 0x21DF, 0x21DF},
1347 {0x21E0, 0x21E0, 0x21E0}, {0x21E1, 0x21E1, 0x21E1},
1348 {0x21E2, 0x21E2, 0x21E2}, {0x21E3, 0x21E3, 0x21E3},
1349 {0x21E4, 0x21E4, 0x21E4}, {0x21E5, 0x21E5, 0x21E5},
1350 {0x21E6, 0x21E6, 0x21E6}, {0x21E7, 0x21E7, 0x21E7},
1351 {0x21E8, 0x21E8, 0x21E8}, {0x21E9, 0x21E9, 0x21E9},
1352 {0x21EA, 0x21EA, 0x21EA}, {0x21EB, 0x21EB, 0x21EB},
1353 {0x21EC, 0x21EC, 0x21EC}, {0x21ED, 0x21ED, 0x21ED},
1354 {0x21EE, 0x21EE, 0x21EE}, {0x21EF, 0x21EF, 0x21EF},
1355 {0x21F0, 0x21F0, 0x21F0}, {0x21F1, 0x21F1, 0x21F1},
1356 {0x21F2, 0x21F2, 0x21F2}, {0x21F3, 0x21F3, 0x21F3},
1357 {0x21F4, 0x21F4, 0x21F4}, {0x21F5, 0x21F5, 0x21F5},
1358 {0x21F6, 0x21F6, 0x21F6}, {0x21F7, 0x21F7, 0x21F7},
1359 {0x21F8, 0x21F8, 0x21F8}, {0x21F9, 0x21F9, 0x21F9},
1360 {0x21FA, 0x21FA, 0x21FA}, {0x21FB, 0x21FB, 0x21FB},
1361 {0x21FC, 0x21FC, 0x21FC}, {0x21FD, 0x21FD, 0x21FD},
1362 {0x21FE, 0x21FE, 0x21FE}, {0x21FF, 0x21FF, 0x21FF}};
1363
1364 static const MY_UNICASE_CHARACTER plane24[] = {
1365 {0x2400, 0x2400, 0x2400}, {0x2401, 0x2401, 0x2401},
1366 {0x2402, 0x2402, 0x2402}, {0x2403, 0x2403, 0x2403},
1367 {0x2404, 0x2404, 0x2404}, {0x2405, 0x2405, 0x2405},
1368 {0x2406, 0x2406, 0x2406}, {0x2407, 0x2407, 0x2407},
1369 {0x2408, 0x2408, 0x2408}, {0x2409, 0x2409, 0x2409},
1370 {0x240A, 0x240A, 0x240A}, {0x240B, 0x240B, 0x240B},
1371 {0x240C, 0x240C, 0x240C}, {0x240D, 0x240D, 0x240D},
1372 {0x240E, 0x240E, 0x240E}, {0x240F, 0x240F, 0x240F},
1373 {0x2410, 0x2410, 0x2410}, {0x2411, 0x2411, 0x2411},
1374 {0x2412, 0x2412, 0x2412}, {0x2413, 0x2413, 0x2413},
1375 {0x2414, 0x2414, 0x2414}, {0x2415, 0x2415, 0x2415},
1376 {0x2416, 0x2416, 0x2416}, {0x2417, 0x2417, 0x2417},
1377 {0x2418, 0x2418, 0x2418}, {0x2419, 0x2419, 0x2419},
1378 {0x241A, 0x241A, 0x241A}, {0x241B, 0x241B, 0x241B},
1379 {0x241C, 0x241C, 0x241C}, {0x241D, 0x241D, 0x241D},
1380 {0x241E, 0x241E, 0x241E}, {0x241F, 0x241F, 0x241F},
1381 {0x2420, 0x2420, 0x2420}, {0x2421, 0x2421, 0x2421},
1382 {0x2422, 0x2422, 0x2422}, {0x2423, 0x2423, 0x2423},
1383 {0x2424, 0x2424, 0x2424}, {0x2425, 0x2425, 0x2425},
1384 {0x2426, 0x2426, 0x2426}, {0x2427, 0x2427, 0x2427},
1385 {0x2428, 0x2428, 0x2428}, {0x2429, 0x2429, 0x2429},
1386 {0x242A, 0x242A, 0x242A}, {0x242B, 0x242B, 0x242B},
1387 {0x242C, 0x242C, 0x242C}, {0x242D, 0x242D, 0x242D},
1388 {0x242E, 0x242E, 0x242E}, {0x242F, 0x242F, 0x242F},
1389 {0x2430, 0x2430, 0x2430}, {0x2431, 0x2431, 0x2431},
1390 {0x2432, 0x2432, 0x2432}, {0x2433, 0x2433, 0x2433},
1391 {0x2434, 0x2434, 0x2434}, {0x2435, 0x2435, 0x2435},
1392 {0x2436, 0x2436, 0x2436}, {0x2437, 0x2437, 0x2437},
1393 {0x2438, 0x2438, 0x2438}, {0x2439, 0x2439, 0x2439},
1394 {0x243A, 0x243A, 0x243A}, {0x243B, 0x243B, 0x243B},
1395 {0x243C, 0x243C, 0x243C}, {0x243D, 0x243D, 0x243D},
1396 {0x243E, 0x243E, 0x243E}, {0x243F, 0x243F, 0x243F},
1397 {0x2440, 0x2440, 0x2440}, {0x2441, 0x2441, 0x2441},
1398 {0x2442, 0x2442, 0x2442}, {0x2443, 0x2443, 0x2443},
1399 {0x2444, 0x2444, 0x2444}, {0x2445, 0x2445, 0x2445},
1400 {0x2446, 0x2446, 0x2446}, {0x2447, 0x2447, 0x2447},
1401 {0x2448, 0x2448, 0x2448}, {0x2449, 0x2449, 0x2449},
1402 {0x244A, 0x244A, 0x244A}, {0x244B, 0x244B, 0x244B},
1403 {0x244C, 0x244C, 0x244C}, {0x244D, 0x244D, 0x244D},
1404 {0x244E, 0x244E, 0x244E}, {0x244F, 0x244F, 0x244F},
1405 {0x2450, 0x2450, 0x2450}, {0x2451, 0x2451, 0x2451},
1406 {0x2452, 0x2452, 0x2452}, {0x2453, 0x2453, 0x2453},
1407 {0x2454, 0x2454, 0x2454}, {0x2455, 0x2455, 0x2455},
1408 {0x2456, 0x2456, 0x2456}, {0x2457, 0x2457, 0x2457},
1409 {0x2458, 0x2458, 0x2458}, {0x2459, 0x2459, 0x2459},
1410 {0x245A, 0x245A, 0x245A}, {0x245B, 0x245B, 0x245B},
1411 {0x245C, 0x245C, 0x245C}, {0x245D, 0x245D, 0x245D},
1412 {0x245E, 0x245E, 0x245E}, {0x245F, 0x245F, 0x245F},
1413 {0x2460, 0x2460, 0x2460}, {0x2461, 0x2461, 0x2461},
1414 {0x2462, 0x2462, 0x2462}, {0x2463, 0x2463, 0x2463},
1415 {0x2464, 0x2464, 0x2464}, {0x2465, 0x2465, 0x2465},
1416 {0x2466, 0x2466, 0x2466}, {0x2467, 0x2467, 0x2467},
1417 {0x2468, 0x2468, 0x2468}, {0x2469, 0x2469, 0x2469},
1418 {0x246A, 0x246A, 0x246A}, {0x246B, 0x246B, 0x246B},
1419 {0x246C, 0x246C, 0x246C}, {0x246D, 0x246D, 0x246D},
1420 {0x246E, 0x246E, 0x246E}, {0x246F, 0x246F, 0x246F},
1421 {0x2470, 0x2470, 0x2470}, {0x2471, 0x2471, 0x2471},
1422 {0x2472, 0x2472, 0x2472}, {0x2473, 0x2473, 0x2473},
1423 {0x2474, 0x2474, 0x2474}, {0x2475, 0x2475, 0x2475},
1424 {0x2476, 0x2476, 0x2476}, {0x2477, 0x2477, 0x2477},
1425 {0x2478, 0x2478, 0x2478}, {0x2479, 0x2479, 0x2479},
1426 {0x247A, 0x247A, 0x247A}, {0x247B, 0x247B, 0x247B},
1427 {0x247C, 0x247C, 0x247C}, {0x247D, 0x247D, 0x247D},
1428 {0x247E, 0x247E, 0x247E}, {0x247F, 0x247F, 0x247F},
1429 {0x2480, 0x2480, 0x2480}, {0x2481, 0x2481, 0x2481},
1430 {0x2482, 0x2482, 0x2482}, {0x2483, 0x2483, 0x2483},
1431 {0x2484, 0x2484, 0x2484}, {0x2485, 0x2485, 0x2485},
1432 {0x2486, 0x2486, 0x2486}, {0x2487, 0x2487, 0x2487},
1433 {0x2488, 0x2488, 0x2488}, {0x2489, 0x2489, 0x2489},
1434 {0x248A, 0x248A, 0x248A}, {0x248B, 0x248B, 0x248B},
1435 {0x248C, 0x248C, 0x248C}, {0x248D, 0x248D, 0x248D},
1436 {0x248E, 0x248E, 0x248E}, {0x248F, 0x248F, 0x248F},
1437 {0x2490, 0x2490, 0x2490}, {0x2491, 0x2491, 0x2491},
1438 {0x2492, 0x2492, 0x2492}, {0x2493, 0x2493, 0x2493},
1439 {0x2494, 0x2494, 0x2494}, {0x2495, 0x2495, 0x2495},
1440 {0x2496, 0x2496, 0x2496}, {0x2497, 0x2497, 0x2497},
1441 {0x2498, 0x2498, 0x2498}, {0x2499, 0x2499, 0x2499},
1442 {0x249A, 0x249A, 0x249A}, {0x249B, 0x249B, 0x249B},
1443 {0x249C, 0x249C, 0x249C}, {0x249D, 0x249D, 0x249D},
1444 {0x249E, 0x249E, 0x249E}, {0x249F, 0x249F, 0x249F},
1445 {0x24A0, 0x24A0, 0x24A0}, {0x24A1, 0x24A1, 0x24A1},
1446 {0x24A2, 0x24A2, 0x24A2}, {0x24A3, 0x24A3, 0x24A3},
1447 {0x24A4, 0x24A4, 0x24A4}, {0x24A5, 0x24A5, 0x24A5},
1448 {0x24A6, 0x24A6, 0x24A6}, {0x24A7, 0x24A7, 0x24A7},
1449 {0x24A8, 0x24A8, 0x24A8}, {0x24A9, 0x24A9, 0x24A9},
1450 {0x24AA, 0x24AA, 0x24AA}, {0x24AB, 0x24AB, 0x24AB},
1451 {0x24AC, 0x24AC, 0x24AC}, {0x24AD, 0x24AD, 0x24AD},
1452 {0x24AE, 0x24AE, 0x24AE}, {0x24AF, 0x24AF, 0x24AF},
1453 {0x24B0, 0x24B0, 0x24B0}, {0x24B1, 0x24B1, 0x24B1},
1454 {0x24B2, 0x24B2, 0x24B2}, {0x24B3, 0x24B3, 0x24B3},
1455 {0x24B4, 0x24B4, 0x24B4}, {0x24B5, 0x24B5, 0x24B5},
1456 {0x24B6, 0x24D0, 0x24B6}, {0x24B7, 0x24D1, 0x24B7},
1457 {0x24B8, 0x24D2, 0x24B8}, {0x24B9, 0x24D3, 0x24B9},
1458 {0x24BA, 0x24D4, 0x24BA}, {0x24BB, 0x24D5, 0x24BB},
1459 {0x24BC, 0x24D6, 0x24BC}, {0x24BD, 0x24D7, 0x24BD},
1460 {0x24BE, 0x24D8, 0x24BE}, {0x24BF, 0x24D9, 0x24BF},
1461 {0x24C0, 0x24DA, 0x24C0}, {0x24C1, 0x24DB, 0x24C1},
1462 {0x24C2, 0x24DC, 0x24C2}, {0x24C3, 0x24DD, 0x24C3},
1463 {0x24C4, 0x24DE, 0x24C4}, {0x24C5, 0x24DF, 0x24C5},
1464 {0x24C6, 0x24E0, 0x24C6}, {0x24C7, 0x24E1, 0x24C7},
1465 {0x24C8, 0x24E2, 0x24C8}, {0x24C9, 0x24E3, 0x24C9},
1466 {0x24CA, 0x24E4, 0x24CA}, {0x24CB, 0x24E5, 0x24CB},
1467 {0x24CC, 0x24E6, 0x24CC}, {0x24CD, 0x24E7, 0x24CD},
1468 {0x24CE, 0x24E8, 0x24CE}, {0x24CF, 0x24E9, 0x24CF},
1469 {0x24B6, 0x24D0, 0x24B6}, {0x24B7, 0x24D1, 0x24B7},
1470 {0x24B8, 0x24D2, 0x24B8}, {0x24B9, 0x24D3, 0x24B9},
1471 {0x24BA, 0x24D4, 0x24BA}, {0x24BB, 0x24D5, 0x24BB},
1472 {0x24BC, 0x24D6, 0x24BC}, {0x24BD, 0x24D7, 0x24BD},
1473 {0x24BE, 0x24D8, 0x24BE}, {0x24BF, 0x24D9, 0x24BF},
1474 {0x24C0, 0x24DA, 0x24C0}, {0x24C1, 0x24DB, 0x24C1},
1475 {0x24C2, 0x24DC, 0x24C2}, {0x24C3, 0x24DD, 0x24C3},
1476 {0x24C4, 0x24DE, 0x24C4}, {0x24C5, 0x24DF, 0x24C5},
1477 {0x24C6, 0x24E0, 0x24C6}, {0x24C7, 0x24E1, 0x24C7},
1478 {0x24C8, 0x24E2, 0x24C8}, {0x24C9, 0x24E3, 0x24C9},
1479 {0x24CA, 0x24E4, 0x24CA}, {0x24CB, 0x24E5, 0x24CB},
1480 {0x24CC, 0x24E6, 0x24CC}, {0x24CD, 0x24E7, 0x24CD},
1481 {0x24CE, 0x24E8, 0x24CE}, {0x24CF, 0x24E9, 0x24CF},
1482 {0x24EA, 0x24EA, 0x24EA}, {0x24EB, 0x24EB, 0x24EB},
1483 {0x24EC, 0x24EC, 0x24EC}, {0x24ED, 0x24ED, 0x24ED},
1484 {0x24EE, 0x24EE, 0x24EE}, {0x24EF, 0x24EF, 0x24EF},
1485 {0x24F0, 0x24F0, 0x24F0}, {0x24F1, 0x24F1, 0x24F1},
1486 {0x24F2, 0x24F2, 0x24F2}, {0x24F3, 0x24F3, 0x24F3},
1487 {0x24F4, 0x24F4, 0x24F4}, {0x24F5, 0x24F5, 0x24F5},
1488 {0x24F6, 0x24F6, 0x24F6}, {0x24F7, 0x24F7, 0x24F7},
1489 {0x24F8, 0x24F8, 0x24F8}, {0x24F9, 0x24F9, 0x24F9},
1490 {0x24FA, 0x24FA, 0x24FA}, {0x24FB, 0x24FB, 0x24FB},
1491 {0x24FC, 0x24FC, 0x24FC}, {0x24FD, 0x24FD, 0x24FD},
1492 {0x24FE, 0x24FE, 0x24FE}, {0x24FF, 0x24FF, 0x24FF}};
1493
1494 static const MY_UNICASE_CHARACTER planeFF[] = {
1495 {0xFF00, 0xFF00, 0xFF00}, {0xFF01, 0xFF01, 0xFF01},
1496 {0xFF02, 0xFF02, 0xFF02}, {0xFF03, 0xFF03, 0xFF03},
1497 {0xFF04, 0xFF04, 0xFF04}, {0xFF05, 0xFF05, 0xFF05},
1498 {0xFF06, 0xFF06, 0xFF06}, {0xFF07, 0xFF07, 0xFF07},
1499 {0xFF08, 0xFF08, 0xFF08}, {0xFF09, 0xFF09, 0xFF09},
1500 {0xFF0A, 0xFF0A, 0xFF0A}, {0xFF0B, 0xFF0B, 0xFF0B},
1501 {0xFF0C, 0xFF0C, 0xFF0C}, {0xFF0D, 0xFF0D, 0xFF0D},
1502 {0xFF0E, 0xFF0E, 0xFF0E}, {0xFF0F, 0xFF0F, 0xFF0F},
1503 {0xFF10, 0xFF10, 0xFF10}, {0xFF11, 0xFF11, 0xFF11},
1504 {0xFF12, 0xFF12, 0xFF12}, {0xFF13, 0xFF13, 0xFF13},
1505 {0xFF14, 0xFF14, 0xFF14}, {0xFF15, 0xFF15, 0xFF15},
1506 {0xFF16, 0xFF16, 0xFF16}, {0xFF17, 0xFF17, 0xFF17},
1507 {0xFF18, 0xFF18, 0xFF18}, {0xFF19, 0xFF19, 0xFF19},
1508 {0xFF1A, 0xFF1A, 0xFF1A}, {0xFF1B, 0xFF1B, 0xFF1B},
1509 {0xFF1C, 0xFF1C, 0xFF1C}, {0xFF1D, 0xFF1D, 0xFF1D},
1510 {0xFF1E, 0xFF1E, 0xFF1E}, {0xFF1F, 0xFF1F, 0xFF1F},
1511 {0xFF20, 0xFF20, 0xFF20}, {0xFF21, 0xFF41, 0xFF21},
1512 {0xFF22, 0xFF42, 0xFF22}, {0xFF23, 0xFF43, 0xFF23},
1513 {0xFF24, 0xFF44, 0xFF24}, {0xFF25, 0xFF45, 0xFF25},
1514 {0xFF26, 0xFF46, 0xFF26}, {0xFF27, 0xFF47, 0xFF27},
1515 {0xFF28, 0xFF48, 0xFF28}, {0xFF29, 0xFF49, 0xFF29},
1516 {0xFF2A, 0xFF4A, 0xFF2A}, {0xFF2B, 0xFF4B, 0xFF2B},
1517 {0xFF2C, 0xFF4C, 0xFF2C}, {0xFF2D, 0xFF4D, 0xFF2D},
1518 {0xFF2E, 0xFF4E, 0xFF2E}, {0xFF2F, 0xFF4F, 0xFF2F},
1519 {0xFF30, 0xFF50, 0xFF30}, {0xFF31, 0xFF51, 0xFF31},
1520 {0xFF32, 0xFF52, 0xFF32}, {0xFF33, 0xFF53, 0xFF33},
1521 {0xFF34, 0xFF54, 0xFF34}, {0xFF35, 0xFF55, 0xFF35},
1522 {0xFF36, 0xFF56, 0xFF36}, {0xFF37, 0xFF57, 0xFF37},
1523 {0xFF38, 0xFF58, 0xFF38}, {0xFF39, 0xFF59, 0xFF39},
1524 {0xFF3A, 0xFF5A, 0xFF3A}, {0xFF3B, 0xFF3B, 0xFF3B},
1525 {0xFF3C, 0xFF3C, 0xFF3C}, {0xFF3D, 0xFF3D, 0xFF3D},
1526 {0xFF3E, 0xFF3E, 0xFF3E}, {0xFF3F, 0xFF3F, 0xFF3F},
1527 {0xFF40, 0xFF40, 0xFF40}, {0xFF21, 0xFF41, 0xFF21},
1528 {0xFF22, 0xFF42, 0xFF22}, {0xFF23, 0xFF43, 0xFF23},
1529 {0xFF24, 0xFF44, 0xFF24}, {0xFF25, 0xFF45, 0xFF25},
1530 {0xFF26, 0xFF46, 0xFF26}, {0xFF27, 0xFF47, 0xFF27},
1531 {0xFF28, 0xFF48, 0xFF28}, {0xFF29, 0xFF49, 0xFF29},
1532 {0xFF2A, 0xFF4A, 0xFF2A}, {0xFF2B, 0xFF4B, 0xFF2B},
1533 {0xFF2C, 0xFF4C, 0xFF2C}, {0xFF2D, 0xFF4D, 0xFF2D},
1534 {0xFF2E, 0xFF4E, 0xFF2E}, {0xFF2F, 0xFF4F, 0xFF2F},
1535 {0xFF30, 0xFF50, 0xFF30}, {0xFF31, 0xFF51, 0xFF31},
1536 {0xFF32, 0xFF52, 0xFF32}, {0xFF33, 0xFF53, 0xFF33},
1537 {0xFF34, 0xFF54, 0xFF34}, {0xFF35, 0xFF55, 0xFF35},
1538 {0xFF36, 0xFF56, 0xFF36}, {0xFF37, 0xFF57, 0xFF37},
1539 {0xFF38, 0xFF58, 0xFF38}, {0xFF39, 0xFF59, 0xFF39},
1540 {0xFF3A, 0xFF5A, 0xFF3A}, {0xFF5B, 0xFF5B, 0xFF5B},
1541 {0xFF5C, 0xFF5C, 0xFF5C}, {0xFF5D, 0xFF5D, 0xFF5D},
1542 {0xFF5E, 0xFF5E, 0xFF5E}, {0xFF5F, 0xFF5F, 0xFF5F},
1543 {0xFF60, 0xFF60, 0xFF60}, {0xFF61, 0xFF61, 0xFF61},
1544 {0xFF62, 0xFF62, 0xFF62}, {0xFF63, 0xFF63, 0xFF63},
1545 {0xFF64, 0xFF64, 0xFF64}, {0xFF65, 0xFF65, 0xFF65},
1546 {0xFF66, 0xFF66, 0xFF66}, {0xFF67, 0xFF67, 0xFF67},
1547 {0xFF68, 0xFF68, 0xFF68}, {0xFF69, 0xFF69, 0xFF69},
1548 {0xFF6A, 0xFF6A, 0xFF6A}, {0xFF6B, 0xFF6B, 0xFF6B},
1549 {0xFF6C, 0xFF6C, 0xFF6C}, {0xFF6D, 0xFF6D, 0xFF6D},
1550 {0xFF6E, 0xFF6E, 0xFF6E}, {0xFF6F, 0xFF6F, 0xFF6F},
1551 {0xFF70, 0xFF70, 0xFF70}, {0xFF71, 0xFF71, 0xFF71},
1552 {0xFF72, 0xFF72, 0xFF72}, {0xFF73, 0xFF73, 0xFF73},
1553 {0xFF74, 0xFF74, 0xFF74}, {0xFF75, 0xFF75, 0xFF75},
1554 {0xFF76, 0xFF76, 0xFF76}, {0xFF77, 0xFF77, 0xFF77},
1555 {0xFF78, 0xFF78, 0xFF78}, {0xFF79, 0xFF79, 0xFF79},
1556 {0xFF7A, 0xFF7A, 0xFF7A}, {0xFF7B, 0xFF7B, 0xFF7B},
1557 {0xFF7C, 0xFF7C, 0xFF7C}, {0xFF7D, 0xFF7D, 0xFF7D},
1558 {0xFF7E, 0xFF7E, 0xFF7E}, {0xFF7F, 0xFF7F, 0xFF7F},
1559 {0xFF80, 0xFF80, 0xFF80}, {0xFF81, 0xFF81, 0xFF81},
1560 {0xFF82, 0xFF82, 0xFF82}, {0xFF83, 0xFF83, 0xFF83},
1561 {0xFF84, 0xFF84, 0xFF84}, {0xFF85, 0xFF85, 0xFF85},
1562 {0xFF86, 0xFF86, 0xFF86}, {0xFF87, 0xFF87, 0xFF87},
1563 {0xFF88, 0xFF88, 0xFF88}, {0xFF89, 0xFF89, 0xFF89},
1564 {0xFF8A, 0xFF8A, 0xFF8A}, {0xFF8B, 0xFF8B, 0xFF8B},
1565 {0xFF8C, 0xFF8C, 0xFF8C}, {0xFF8D, 0xFF8D, 0xFF8D},
1566 {0xFF8E, 0xFF8E, 0xFF8E}, {0xFF8F, 0xFF8F, 0xFF8F},
1567 {0xFF90, 0xFF90, 0xFF90}, {0xFF91, 0xFF91, 0xFF91},
1568 {0xFF92, 0xFF92, 0xFF92}, {0xFF93, 0xFF93, 0xFF93},
1569 {0xFF94, 0xFF94, 0xFF94}, {0xFF95, 0xFF95, 0xFF95},
1570 {0xFF96, 0xFF96, 0xFF96}, {0xFF97, 0xFF97, 0xFF97},
1571 {0xFF98, 0xFF98, 0xFF98}, {0xFF99, 0xFF99, 0xFF99},
1572 {0xFF9A, 0xFF9A, 0xFF9A}, {0xFF9B, 0xFF9B, 0xFF9B},
1573 {0xFF9C, 0xFF9C, 0xFF9C}, {0xFF9D, 0xFF9D, 0xFF9D},
1574 {0xFF9E, 0xFF9E, 0xFF9E}, {0xFF9F, 0xFF9F, 0xFF9F},
1575 {0xFFA0, 0xFFA0, 0xFFA0}, {0xFFA1, 0xFFA1, 0xFFA1},
1576 {0xFFA2, 0xFFA2, 0xFFA2}, {0xFFA3, 0xFFA3, 0xFFA3},
1577 {0xFFA4, 0xFFA4, 0xFFA4}, {0xFFA5, 0xFFA5, 0xFFA5},
1578 {0xFFA6, 0xFFA6, 0xFFA6}, {0xFFA7, 0xFFA7, 0xFFA7},
1579 {0xFFA8, 0xFFA8, 0xFFA8}, {0xFFA9, 0xFFA9, 0xFFA9},
1580 {0xFFAA, 0xFFAA, 0xFFAA}, {0xFFAB, 0xFFAB, 0xFFAB},
1581 {0xFFAC, 0xFFAC, 0xFFAC}, {0xFFAD, 0xFFAD, 0xFFAD},
1582 {0xFFAE, 0xFFAE, 0xFFAE}, {0xFFAF, 0xFFAF, 0xFFAF},
1583 {0xFFB0, 0xFFB0, 0xFFB0}, {0xFFB1, 0xFFB1, 0xFFB1},
1584 {0xFFB2, 0xFFB2, 0xFFB2}, {0xFFB3, 0xFFB3, 0xFFB3},
1585 {0xFFB4, 0xFFB4, 0xFFB4}, {0xFFB5, 0xFFB5, 0xFFB5},
1586 {0xFFB6, 0xFFB6, 0xFFB6}, {0xFFB7, 0xFFB7, 0xFFB7},
1587 {0xFFB8, 0xFFB8, 0xFFB8}, {0xFFB9, 0xFFB9, 0xFFB9},
1588 {0xFFBA, 0xFFBA, 0xFFBA}, {0xFFBB, 0xFFBB, 0xFFBB},
1589 {0xFFBC, 0xFFBC, 0xFFBC}, {0xFFBD, 0xFFBD, 0xFFBD},
1590 {0xFFBE, 0xFFBE, 0xFFBE}, {0xFFBF, 0xFFBF, 0xFFBF},
1591 {0xFFC0, 0xFFC0, 0xFFC0}, {0xFFC1, 0xFFC1, 0xFFC1},
1592 {0xFFC2, 0xFFC2, 0xFFC2}, {0xFFC3, 0xFFC3, 0xFFC3},
1593 {0xFFC4, 0xFFC4, 0xFFC4}, {0xFFC5, 0xFFC5, 0xFFC5},
1594 {0xFFC6, 0xFFC6, 0xFFC6}, {0xFFC7, 0xFFC7, 0xFFC7},
1595 {0xFFC8, 0xFFC8, 0xFFC8}, {0xFFC9, 0xFFC9, 0xFFC9},
1596 {0xFFCA, 0xFFCA, 0xFFCA}, {0xFFCB, 0xFFCB, 0xFFCB},
1597 {0xFFCC, 0xFFCC, 0xFFCC}, {0xFFCD, 0xFFCD, 0xFFCD},
1598 {0xFFCE, 0xFFCE, 0xFFCE}, {0xFFCF, 0xFFCF, 0xFFCF},
1599 {0xFFD0, 0xFFD0, 0xFFD0}, {0xFFD1, 0xFFD1, 0xFFD1},
1600 {0xFFD2, 0xFFD2, 0xFFD2}, {0xFFD3, 0xFFD3, 0xFFD3},
1601 {0xFFD4, 0xFFD4, 0xFFD4}, {0xFFD5, 0xFFD5, 0xFFD5},
1602 {0xFFD6, 0xFFD6, 0xFFD6}, {0xFFD7, 0xFFD7, 0xFFD7},
1603 {0xFFD8, 0xFFD8, 0xFFD8}, {0xFFD9, 0xFFD9, 0xFFD9},
1604 {0xFFDA, 0xFFDA, 0xFFDA}, {0xFFDB, 0xFFDB, 0xFFDB},
1605 {0xFFDC, 0xFFDC, 0xFFDC}, {0xFFDD, 0xFFDD, 0xFFDD},
1606 {0xFFDE, 0xFFDE, 0xFFDE}, {0xFFDF, 0xFFDF, 0xFFDF},
1607 {0xFFE0, 0xFFE0, 0xFFE0}, {0xFFE1, 0xFFE1, 0xFFE1},
1608 {0xFFE2, 0xFFE2, 0xFFE2}, {0xFFE3, 0xFFE3, 0xFFE3},
1609 {0xFFE4, 0xFFE4, 0xFFE4}, {0xFFE5, 0xFFE5, 0xFFE5},
1610 {0xFFE6, 0xFFE6, 0xFFE6}, {0xFFE7, 0xFFE7, 0xFFE7},
1611 {0xFFE8, 0xFFE8, 0xFFE8}, {0xFFE9, 0xFFE9, 0xFFE9},
1612 {0xFFEA, 0xFFEA, 0xFFEA}, {0xFFEB, 0xFFEB, 0xFFEB},
1613 {0xFFEC, 0xFFEC, 0xFFEC}, {0xFFED, 0xFFED, 0xFFED},
1614 {0xFFEE, 0xFFEE, 0xFFEE}, {0xFFEF, 0xFFEF, 0xFFEF},
1615 {0xFFF0, 0xFFF0, 0xFFF0}, {0xFFF1, 0xFFF1, 0xFFF1},
1616 {0xFFF2, 0xFFF2, 0xFFF2}, {0xFFF3, 0xFFF3, 0xFFF3},
1617 {0xFFF4, 0xFFF4, 0xFFF4}, {0xFFF5, 0xFFF5, 0xFFF5},
1618 {0xFFF6, 0xFFF6, 0xFFF6}, {0xFFF7, 0xFFF7, 0xFFF7},
1619 {0xFFF8, 0xFFF8, 0xFFF8}, {0xFFF9, 0xFFF9, 0xFFF9},
1620 {0xFFFA, 0xFFFA, 0xFFFA}, {0xFFFB, 0xFFFB, 0xFFFB},
1621 {0xFFFC, 0xFFFC, 0xFFFC}, {0xFFFD, 0xFFFD, 0xFFFD},
1622 {0xFFFE, 0xFFFE, 0xFFFE}, {0xFFFF, 0xFFFF, 0xFFFF}};
1623
1624 static const MY_UNICASE_CHARACTER *my_unicase_pages_default[256] = {
1625 plane00, plane01, plane02, plane03, plane04, plane05, nullptr, nullptr,
1626 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1627 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1628 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, plane1E, plane1F,
1629 nullptr, plane21, nullptr, nullptr, plane24, nullptr, nullptr, nullptr,
1630 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1631 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1632 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1633 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1634 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1635 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1636 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1637 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1638 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1639 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1640 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1641 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1642 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1643 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1644 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1645 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1646 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1647 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1648 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1649 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1650 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1651 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1652 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1653 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1654 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1655 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1656 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, planeFF};
1657
1658 MY_UNICASE_INFO my_unicase_default = {0xFFFF, my_unicase_pages_default};
1659
1660 /*
1661 Reproduce old utf8_general_ci behaviour before we fixed Bug#27877.
1662 */
1663 static const MY_UNICASE_CHARACTER *my_unicase_pages_mysql500[256] = {
1664 plane00_mysql500, plane01, plane02, plane03, plane04, plane05, nullptr,
1665 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1666 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1667 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1668 nullptr, nullptr, plane1E, plane1F, nullptr, plane21, nullptr,
1669 nullptr, plane24, nullptr, nullptr, nullptr, nullptr, nullptr,
1670 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1671 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1672 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1673 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1674 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1675 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1676 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1677 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1678 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1679 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1680 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1681 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1682 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1683 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1684 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1685 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1686 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1687 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1688 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1689 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1690 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1691 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1692 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1693 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1694 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1695 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1696 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1697 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1698 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1699 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1700 nullptr, nullptr, nullptr, planeFF
1701
1702 };
1703
1704 MY_UNICASE_INFO my_unicase_mysql500 = {0xFFFF, my_unicase_pages_mysql500};
1705
1706 /*
1707 Turkish lower/upper mapping:
1708 1. LOWER(0x0049 LATIN CAPITAL LETTER I) ->
1709 0x0131 LATIN SMALL LETTER DOTLESS I
1710 2. UPPER(0x0069 LATIN SMALL LETTER I) ->
1711 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
1712 */
1713
1714 static const MY_UNICASE_CHARACTER turk00[] = {
1715 {0x0000, 0x0000, 0x0000}, {0x0001, 0x0001, 0x0001},
1716 {0x0002, 0x0002, 0x0002}, {0x0003, 0x0003, 0x0003},
1717 {0x0004, 0x0004, 0x0004}, {0x0005, 0x0005, 0x0005},
1718 {0x0006, 0x0006, 0x0006}, {0x0007, 0x0007, 0x0007},
1719 {0x0008, 0x0008, 0x0008}, {0x0009, 0x0009, 0x0009},
1720 {0x000A, 0x000A, 0x000A}, {0x000B, 0x000B, 0x000B},
1721 {0x000C, 0x000C, 0x000C}, {0x000D, 0x000D, 0x000D},
1722 {0x000E, 0x000E, 0x000E}, {0x000F, 0x000F, 0x000F},
1723 {0x0010, 0x0010, 0x0010}, {0x0011, 0x0011, 0x0011},
1724 {0x0012, 0x0012, 0x0012}, {0x0013, 0x0013, 0x0013},
1725 {0x0014, 0x0014, 0x0014}, {0x0015, 0x0015, 0x0015},
1726 {0x0016, 0x0016, 0x0016}, {0x0017, 0x0017, 0x0017},
1727 {0x0018, 0x0018, 0x0018}, {0x0019, 0x0019, 0x0019},
1728 {0x001A, 0x001A, 0x001A}, {0x001B, 0x001B, 0x001B},
1729 {0x001C, 0x001C, 0x001C}, {0x001D, 0x001D, 0x001D},
1730 {0x001E, 0x001E, 0x001E}, {0x001F, 0x001F, 0x001F},
1731 {0x0020, 0x0020, 0x0020}, {0x0021, 0x0021, 0x0021},
1732 {0x0022, 0x0022, 0x0022}, {0x0023, 0x0023, 0x0023},
1733 {0x0024, 0x0024, 0x0024}, {0x0025, 0x0025, 0x0025},
1734 {0x0026, 0x0026, 0x0026}, {0x0027, 0x0027, 0x0027},
1735 {0x0028, 0x0028, 0x0028}, {0x0029, 0x0029, 0x0029},
1736 {0x002A, 0x002A, 0x002A}, {0x002B, 0x002B, 0x002B},
1737 {0x002C, 0x002C, 0x002C}, {0x002D, 0x002D, 0x002D},
1738 {0x002E, 0x002E, 0x002E}, {0x002F, 0x002F, 0x002F},
1739 {0x0030, 0x0030, 0x0030}, {0x0031, 0x0031, 0x0031},
1740 {0x0032, 0x0032, 0x0032}, {0x0033, 0x0033, 0x0033},
1741 {0x0034, 0x0034, 0x0034}, {0x0035, 0x0035, 0x0035},
1742 {0x0036, 0x0036, 0x0036}, {0x0037, 0x0037, 0x0037},
1743 {0x0038, 0x0038, 0x0038}, {0x0039, 0x0039, 0x0039},
1744 {0x003A, 0x003A, 0x003A}, {0x003B, 0x003B, 0x003B},
1745 {0x003C, 0x003C, 0x003C}, {0x003D, 0x003D, 0x003D},
1746 {0x003E, 0x003E, 0x003E}, {0x003F, 0x003F, 0x003F},
1747 {0x0040, 0x0040, 0x0040}, {0x0041, 0x0061, 0x0041},
1748 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
1749 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
1750 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
1751 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0131, 0x0049},
1752 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
1753 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
1754 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
1755 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
1756 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
1757 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
1758 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
1759 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
1760 {0x005A, 0x007A, 0x005A}, {0x005B, 0x005B, 0x005B},
1761 {0x005C, 0x005C, 0x005C}, {0x005D, 0x005D, 0x005D},
1762 {0x005E, 0x005E, 0x005E}, {0x005F, 0x005F, 0x005F},
1763 {0x0060, 0x0060, 0x0060}, {0x0041, 0x0061, 0x0041},
1764 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
1765 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
1766 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
1767 {0x0048, 0x0068, 0x0048}, {0x0130, 0x0069, 0x0049},
1768 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
1769 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
1770 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
1771 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
1772 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
1773 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
1774 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
1775 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
1776 {0x005A, 0x007A, 0x005A}, {0x007B, 0x007B, 0x007B},
1777 {0x007C, 0x007C, 0x007C}, {0x007D, 0x007D, 0x007D},
1778 {0x007E, 0x007E, 0x007E}, {0x007F, 0x007F, 0x007F},
1779 {0x0080, 0x0080, 0x0080}, {0x0081, 0x0081, 0x0081},
1780 {0x0082, 0x0082, 0x0082}, {0x0083, 0x0083, 0x0083},
1781 {0x0084, 0x0084, 0x0084}, {0x0085, 0x0085, 0x0085},
1782 {0x0086, 0x0086, 0x0086}, {0x0087, 0x0087, 0x0087},
1783 {0x0088, 0x0088, 0x0088}, {0x0089, 0x0089, 0x0089},
1784 {0x008A, 0x008A, 0x008A}, {0x008B, 0x008B, 0x008B},
1785 {0x008C, 0x008C, 0x008C}, {0x008D, 0x008D, 0x008D},
1786 {0x008E, 0x008E, 0x008E}, {0x008F, 0x008F, 0x008F},
1787 {0x0090, 0x0090, 0x0090}, {0x0091, 0x0091, 0x0091},
1788 {0x0092, 0x0092, 0x0092}, {0x0093, 0x0093, 0x0093},
1789 {0x0094, 0x0094, 0x0094}, {0x0095, 0x0095, 0x0095},
1790 {0x0096, 0x0096, 0x0096}, {0x0097, 0x0097, 0x0097},
1791 {0x0098, 0x0098, 0x0098}, {0x0099, 0x0099, 0x0099},
1792 {0x009A, 0x009A, 0x009A}, {0x009B, 0x009B, 0x009B},
1793 {0x009C, 0x009C, 0x009C}, {0x009D, 0x009D, 0x009D},
1794 {0x009E, 0x009E, 0x009E}, {0x009F, 0x009F, 0x009F},
1795 {0x00A0, 0x00A0, 0x00A0}, {0x00A1, 0x00A1, 0x00A1},
1796 {0x00A2, 0x00A2, 0x00A2}, {0x00A3, 0x00A3, 0x00A3},
1797 {0x00A4, 0x00A4, 0x00A4}, {0x00A5, 0x00A5, 0x00A5},
1798 {0x00A6, 0x00A6, 0x00A6}, {0x00A7, 0x00A7, 0x00A7},
1799 {0x00A8, 0x00A8, 0x00A8}, {0x00A9, 0x00A9, 0x00A9},
1800 {0x00AA, 0x00AA, 0x00AA}, {0x00AB, 0x00AB, 0x00AB},
1801 {0x00AC, 0x00AC, 0x00AC}, {0x00AD, 0x00AD, 0x00AD},
1802 {0x00AE, 0x00AE, 0x00AE}, {0x00AF, 0x00AF, 0x00AF},
1803 {0x00B0, 0x00B0, 0x00B0}, {0x00B1, 0x00B1, 0x00B1},
1804 {0x00B2, 0x00B2, 0x00B2}, {0x00B3, 0x00B3, 0x00B3},
1805 {0x00B4, 0x00B4, 0x00B4}, {0x039C, 0x00B5, 0x039C},
1806 {0x00B6, 0x00B6, 0x00B6}, {0x00B7, 0x00B7, 0x00B7},
1807 {0x00B8, 0x00B8, 0x00B8}, {0x00B9, 0x00B9, 0x00B9},
1808 {0x00BA, 0x00BA, 0x00BA}, {0x00BB, 0x00BB, 0x00BB},
1809 {0x00BC, 0x00BC, 0x00BC}, {0x00BD, 0x00BD, 0x00BD},
1810 {0x00BE, 0x00BE, 0x00BE}, {0x00BF, 0x00BF, 0x00BF},
1811 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
1812 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
1813 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
1814 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
1815 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
1816 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
1817 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
1818 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
1819 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
1820 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
1821 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
1822 {0x00D6, 0x00F6, 0x004F}, {0x00D7, 0x00D7, 0x00D7},
1823 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
1824 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
1825 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
1826 {0x00DE, 0x00FE, 0x00DE}, {0x00DF, 0x00DF, 0x00DF},
1827 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
1828 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
1829 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
1830 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
1831 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
1832 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
1833 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
1834 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
1835 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
1836 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
1837 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
1838 {0x00D6, 0x00F6, 0x004F}, {0x00F7, 0x00F7, 0x00F7},
1839 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
1840 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
1841 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
1842 {0x00DE, 0x00FE, 0x00DE}, {0x0178, 0x00FF, 0x0059}};
1843
1844 static const MY_UNICASE_CHARACTER *my_unicase_pages_turkish[256] = {
1845 turk00, plane01, plane02, plane03, plane04, plane05, nullptr, nullptr,
1846 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1847 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1848 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, plane1E, plane1F,
1849 nullptr, plane21, nullptr, nullptr, plane24, nullptr, nullptr, nullptr,
1850 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1851 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1852 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1853 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1854 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1855 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1856 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1857 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1858 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1859 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1860 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1861 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1862 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1863 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1864 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1865 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1866 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1867 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1868 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1869 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1870 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1871 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1872 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1873 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1874 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1875 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1876 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, planeFF};
1877
1878 MY_UNICASE_INFO my_unicase_turkish = {0xFFFF, my_unicase_pages_turkish};
1879
1880 /* Unicode-5.2.0 case folding information */
1881 static const MY_UNICASE_CHARACTER u520p00[] = {
1882 {0x0000, 0x0000, 0x0000}, {0x0001, 0x0001, 0x0001}, /* 0000 */
1883 {0x0002, 0x0002, 0x0002}, {0x0003, 0x0003, 0x0003}, /* 0002 */
1884 {0x0004, 0x0004, 0x0004}, {0x0005, 0x0005, 0x0005}, /* 0004 */
1885 {0x0006, 0x0006, 0x0006}, {0x0007, 0x0007, 0x0007}, /* 0006 */
1886 {0x0008, 0x0008, 0x0008}, {0x0009, 0x0009, 0x0009}, /* 0008 */
1887 {0x000A, 0x000A, 0x000A}, {0x000B, 0x000B, 0x000B}, /* 000A */
1888 {0x000C, 0x000C, 0x000C}, {0x000D, 0x000D, 0x000D}, /* 000C */
1889 {0x000E, 0x000E, 0x000E}, {0x000F, 0x000F, 0x000F}, /* 000E */
1890 {0x0010, 0x0010, 0x0010}, {0x0011, 0x0011, 0x0011}, /* 0010 */
1891 {0x0012, 0x0012, 0x0012}, {0x0013, 0x0013, 0x0013}, /* 0012 */
1892 {0x0014, 0x0014, 0x0014}, {0x0015, 0x0015, 0x0015}, /* 0014 */
1893 {0x0016, 0x0016, 0x0016}, {0x0017, 0x0017, 0x0017}, /* 0016 */
1894 {0x0018, 0x0018, 0x0018}, {0x0019, 0x0019, 0x0019}, /* 0018 */
1895 {0x001A, 0x001A, 0x001A}, {0x001B, 0x001B, 0x001B}, /* 001A */
1896 {0x001C, 0x001C, 0x001C}, {0x001D, 0x001D, 0x001D}, /* 001C */
1897 {0x001E, 0x001E, 0x001E}, {0x001F, 0x001F, 0x001F}, /* 001E */
1898 {0x0020, 0x0020, 0x0020}, {0x0021, 0x0021, 0x0021}, /* 0020 */
1899 {0x0022, 0x0022, 0x0022}, {0x0023, 0x0023, 0x0023}, /* 0022 */
1900 {0x0024, 0x0024, 0x0024}, {0x0025, 0x0025, 0x0025}, /* 0024 */
1901 {0x0026, 0x0026, 0x0026}, {0x0027, 0x0027, 0x0027}, /* 0026 */
1902 {0x0028, 0x0028, 0x0028}, {0x0029, 0x0029, 0x0029}, /* 0028 */
1903 {0x002A, 0x002A, 0x002A}, {0x002B, 0x002B, 0x002B}, /* 002A */
1904 {0x002C, 0x002C, 0x002C}, {0x002D, 0x002D, 0x002D}, /* 002C */
1905 {0x002E, 0x002E, 0x002E}, {0x002F, 0x002F, 0x002F}, /* 002E */
1906 {0x0030, 0x0030, 0x0030}, {0x0031, 0x0031, 0x0031}, /* 0030 */
1907 {0x0032, 0x0032, 0x0032}, {0x0033, 0x0033, 0x0033}, /* 0032 */
1908 {0x0034, 0x0034, 0x0034}, {0x0035, 0x0035, 0x0035}, /* 0034 */
1909 {0x0036, 0x0036, 0x0036}, {0x0037, 0x0037, 0x0037}, /* 0036 */
1910 {0x0038, 0x0038, 0x0038}, {0x0039, 0x0039, 0x0039}, /* 0038 */
1911 {0x003A, 0x003A, 0x003A}, {0x003B, 0x003B, 0x003B}, /* 003A */
1912 {0x003C, 0x003C, 0x003C}, {0x003D, 0x003D, 0x003D}, /* 003C */
1913 {0x003E, 0x003E, 0x003E}, {0x003F, 0x003F, 0x003F}, /* 003E */
1914 {0x0040, 0x0040, 0x0040}, {0x0041, 0x0061, 0x0041}, /* 0040 */
1915 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043}, /* 0042 */
1916 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045}, /* 0044 */
1917 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047}, /* 0046 */
1918 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049}, /* 0048 */
1919 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B}, /* 004A */
1920 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D}, /* 004C */
1921 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F}, /* 004E */
1922 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051}, /* 0050 */
1923 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053}, /* 0052 */
1924 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055}, /* 0054 */
1925 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057}, /* 0056 */
1926 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059}, /* 0058 */
1927 {0x005A, 0x007A, 0x005A}, {0x005B, 0x005B, 0x005B}, /* 005A */
1928 {0x005C, 0x005C, 0x005C}, {0x005D, 0x005D, 0x005D}, /* 005C */
1929 {0x005E, 0x005E, 0x005E}, {0x005F, 0x005F, 0x005F}, /* 005E */
1930 {0x0060, 0x0060, 0x0060}, {0x0041, 0x0061, 0x0041}, /* 0060 */
1931 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043}, /* 0062 */
1932 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045}, /* 0064 */
1933 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047}, /* 0066 */
1934 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049}, /* 0068 */
1935 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B}, /* 006A */
1936 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D}, /* 006C */
1937 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F}, /* 006E */
1938 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051}, /* 0070 */
1939 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053}, /* 0072 */
1940 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055}, /* 0074 */
1941 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057}, /* 0076 */
1942 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059}, /* 0078 */
1943 {0x005A, 0x007A, 0x005A}, {0x007B, 0x007B, 0x007B}, /* 007A */
1944 {0x007C, 0x007C, 0x007C}, {0x007D, 0x007D, 0x007D}, /* 007C */
1945 {0x007E, 0x007E, 0x007E}, {0x007F, 0x007F, 0x007F}, /* 007E */
1946 {0x0080, 0x0080, 0x0080}, {0x0081, 0x0081, 0x0081}, /* 0080 */
1947 {0x0082, 0x0082, 0x0082}, {0x0083, 0x0083, 0x0083}, /* 0082 */
1948 {0x0084, 0x0084, 0x0084}, {0x0085, 0x0085, 0x0085}, /* 0084 */
1949 {0x0086, 0x0086, 0x0086}, {0x0087, 0x0087, 0x0087}, /* 0086 */
1950 {0x0088, 0x0088, 0x0088}, {0x0089, 0x0089, 0x0089}, /* 0088 */
1951 {0x008A, 0x008A, 0x008A}, {0x008B, 0x008B, 0x008B}, /* 008A */
1952 {0x008C, 0x008C, 0x008C}, {0x008D, 0x008D, 0x008D}, /* 008C */
1953 {0x008E, 0x008E, 0x008E}, {0x008F, 0x008F, 0x008F}, /* 008E */
1954 {0x0090, 0x0090, 0x0090}, {0x0091, 0x0091, 0x0091}, /* 0090 */
1955 {0x0092, 0x0092, 0x0092}, {0x0093, 0x0093, 0x0093}, /* 0092 */
1956 {0x0094, 0x0094, 0x0094}, {0x0095, 0x0095, 0x0095}, /* 0094 */
1957 {0x0096, 0x0096, 0x0096}, {0x0097, 0x0097, 0x0097}, /* 0096 */
1958 {0x0098, 0x0098, 0x0098}, {0x0099, 0x0099, 0x0099}, /* 0098 */
1959 {0x009A, 0x009A, 0x009A}, {0x009B, 0x009B, 0x009B}, /* 009A */
1960 {0x009C, 0x009C, 0x009C}, {0x009D, 0x009D, 0x009D}, /* 009C */
1961 {0x009E, 0x009E, 0x009E}, {0x009F, 0x009F, 0x009F}, /* 009E */
1962 {0x00A0, 0x00A0, 0x00A0}, {0x00A1, 0x00A1, 0x00A1}, /* 00A0 */
1963 {0x00A2, 0x00A2, 0x00A2}, {0x00A3, 0x00A3, 0x00A3}, /* 00A2 */
1964 {0x00A4, 0x00A4, 0x00A4}, {0x00A5, 0x00A5, 0x00A5}, /* 00A4 */
1965 {0x00A6, 0x00A6, 0x00A6}, {0x00A7, 0x00A7, 0x00A7}, /* 00A6 */
1966 {0x00A8, 0x00A8, 0x00A8}, {0x00A9, 0x00A9, 0x00A9}, /* 00A8 */
1967 {0x00AA, 0x00AA, 0x00AA}, {0x00AB, 0x00AB, 0x00AB}, /* 00AA */
1968 {0x00AC, 0x00AC, 0x00AC}, {0x00AD, 0x00AD, 0x00AD}, /* 00AC */
1969 {0x00AE, 0x00AE, 0x00AE}, {0x00AF, 0x00AF, 0x00AF}, /* 00AE */
1970 {0x00B0, 0x00B0, 0x00B0}, {0x00B1, 0x00B1, 0x00B1}, /* 00B0 */
1971 {0x00B2, 0x00B2, 0x00B2}, {0x00B3, 0x00B3, 0x00B3}, /* 00B2 */
1972 {0x00B4, 0x00B4, 0x00B4}, {0x039C, 0x00B5, 0x039C}, /* 00B4 */
1973 {0x00B6, 0x00B6, 0x00B6}, {0x00B7, 0x00B7, 0x00B7}, /* 00B6 */
1974 {0x00B8, 0x00B8, 0x00B8}, {0x00B9, 0x00B9, 0x00B9}, /* 00B8 */
1975 {0x00BA, 0x00BA, 0x00BA}, {0x00BB, 0x00BB, 0x00BB}, /* 00BA */
1976 {0x00BC, 0x00BC, 0x00BC}, {0x00BD, 0x00BD, 0x00BD}, /* 00BC */
1977 {0x00BE, 0x00BE, 0x00BE}, {0x00BF, 0x00BF, 0x00BF}, /* 00BE */
1978 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041}, /* 00C0 */
1979 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041}, /* 00C2 */
1980 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041}, /* 00C4 */
1981 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043}, /* 00C6 */
1982 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045}, /* 00C8 */
1983 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045}, /* 00CA */
1984 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049}, /* 00CC */
1985 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049}, /* 00CE */
1986 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E}, /* 00D0 */
1987 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F}, /* 00D2 */
1988 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F}, /* 00D4 */
1989 {0x00D6, 0x00F6, 0x004F}, {0x00D7, 0x00D7, 0x00D7}, /* 00D6 */
1990 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055}, /* 00D8 */
1991 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055}, /* 00DA */
1992 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059}, /* 00DC */
1993 {0x00DE, 0x00FE, 0x00DE}, {0x00DF, 0x00DF, 0x0053}, /* 00DE */
1994 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041}, /* 00E0 */
1995 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041}, /* 00E2 */
1996 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041}, /* 00E4 */
1997 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043}, /* 00E6 */
1998 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045}, /* 00E8 */
1999 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045}, /* 00EA */
2000 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049}, /* 00EC */
2001 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049}, /* 00EE */
2002 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E}, /* 00F0 */
2003 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F}, /* 00F2 */
2004 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F}, /* 00F4 */
2005 {0x00D6, 0x00F6, 0x004F}, {0x00F7, 0x00F7, 0x00F7}, /* 00F6 */
2006 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055}, /* 00F8 */
2007 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055}, /* 00FA */
2008 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059}, /* 00FC */
2009 {0x00DE, 0x00FE, 0x00DE}, {0x0178, 0x00FF, 0x0059} /* 00FE */
2010 };
2011
2012 static const MY_UNICASE_CHARACTER u520p01[] = {
2013 {0x0100, 0x0101, 0x0041}, {0x0100, 0x0101, 0x0041}, /* 0100 */
2014 {0x0102, 0x0103, 0x0041}, {0x0102, 0x0103, 0x0041}, /* 0102 */
2015 {0x0104, 0x0105, 0x0041}, {0x0104, 0x0105, 0x0041}, /* 0104 */
2016 {0x0106, 0x0107, 0x0043}, {0x0106, 0x0107, 0x0043}, /* 0106 */
2017 {0x0108, 0x0109, 0x0043}, {0x0108, 0x0109, 0x0043}, /* 0108 */
2018 {0x010A, 0x010B, 0x0043}, {0x010A, 0x010B, 0x0043}, /* 010A */
2019 {0x010C, 0x010D, 0x0043}, {0x010C, 0x010D, 0x0043}, /* 010C */
2020 {0x010E, 0x010F, 0x0044}, {0x010E, 0x010F, 0x0044}, /* 010E */
2021 {0x0110, 0x0111, 0x0110}, {0x0110, 0x0111, 0x0110}, /* 0110 */
2022 {0x0112, 0x0113, 0x0045}, {0x0112, 0x0113, 0x0045}, /* 0112 */
2023 {0x0114, 0x0115, 0x0045}, {0x0114, 0x0115, 0x0045}, /* 0114 */
2024 {0x0116, 0x0117, 0x0045}, {0x0116, 0x0117, 0x0045}, /* 0116 */
2025 {0x0118, 0x0119, 0x0045}, {0x0118, 0x0119, 0x0045}, /* 0118 */
2026 {0x011A, 0x011B, 0x0045}, {0x011A, 0x011B, 0x0045}, /* 011A */
2027 {0x011C, 0x011D, 0x0047}, {0x011C, 0x011D, 0x0047}, /* 011C */
2028 {0x011E, 0x011F, 0x0047}, {0x011E, 0x011F, 0x0047}, /* 011E */
2029 {0x0120, 0x0121, 0x0047}, {0x0120, 0x0121, 0x0047}, /* 0120 */
2030 {0x0122, 0x0123, 0x0047}, {0x0122, 0x0123, 0x0047}, /* 0122 */
2031 {0x0124, 0x0125, 0x0048}, {0x0124, 0x0125, 0x0048}, /* 0124 */
2032 {0x0126, 0x0127, 0x0126}, {0x0126, 0x0127, 0x0126}, /* 0126 */
2033 {0x0128, 0x0129, 0x0049}, {0x0128, 0x0129, 0x0049}, /* 0128 */
2034 {0x012A, 0x012B, 0x0049}, {0x012A, 0x012B, 0x0049}, /* 012A */
2035 {0x012C, 0x012D, 0x0049}, {0x012C, 0x012D, 0x0049}, /* 012C */
2036 {0x012E, 0x012F, 0x0049}, {0x012E, 0x012F, 0x0049}, /* 012E */
2037 {0x0130, 0x0069, 0x0049}, {0x0049, 0x0131, 0x0049}, /* 0130 */
2038 {0x0132, 0x0133, 0x0132}, {0x0132, 0x0133, 0x0132}, /* 0132 */
2039 {0x0134, 0x0135, 0x004A}, {0x0134, 0x0135, 0x004A}, /* 0134 */
2040 {0x0136, 0x0137, 0x004B}, {0x0136, 0x0137, 0x004B}, /* 0136 */
2041 {0x0138, 0x0138, 0x0138}, {0x0139, 0x013A, 0x004C}, /* 0138 */
2042 {0x0139, 0x013A, 0x004C}, {0x013B, 0x013C, 0x004C}, /* 013A */
2043 {0x013B, 0x013C, 0x004C}, {0x013D, 0x013E, 0x004C}, /* 013C */
2044 {0x013D, 0x013E, 0x004C}, {0x013F, 0x0140, 0x013F}, /* 013E */
2045 {0x013F, 0x0140, 0x013F}, {0x0141, 0x0142, 0x0141}, /* 0140 */
2046 {0x0141, 0x0142, 0x0141}, {0x0143, 0x0144, 0x004E}, /* 0142 */
2047 {0x0143, 0x0144, 0x004E}, {0x0145, 0x0146, 0x004E}, /* 0144 */
2048 {0x0145, 0x0146, 0x004E}, {0x0147, 0x0148, 0x004E}, /* 0146 */
2049 {0x0147, 0x0148, 0x004E}, {0x0149, 0x0149, 0x0149}, /* 0148 */
2050 {0x014A, 0x014B, 0x014A}, {0x014A, 0x014B, 0x014A}, /* 014A */
2051 {0x014C, 0x014D, 0x004F}, {0x014C, 0x014D, 0x004F}, /* 014C */
2052 {0x014E, 0x014F, 0x004F}, {0x014E, 0x014F, 0x004F}, /* 014E */
2053 {0x0150, 0x0151, 0x004F}, {0x0150, 0x0151, 0x004F}, /* 0150 */
2054 {0x0152, 0x0153, 0x0152}, {0x0152, 0x0153, 0x0152}, /* 0152 */
2055 {0x0154, 0x0155, 0x0052}, {0x0154, 0x0155, 0x0052}, /* 0154 */
2056 {0x0156, 0x0157, 0x0052}, {0x0156, 0x0157, 0x0052}, /* 0156 */
2057 {0x0158, 0x0159, 0x0052}, {0x0158, 0x0159, 0x0052}, /* 0158 */
2058 {0x015A, 0x015B, 0x0053}, {0x015A, 0x015B, 0x0053}, /* 015A */
2059 {0x015C, 0x015D, 0x0053}, {0x015C, 0x015D, 0x0053}, /* 015C */
2060 {0x015E, 0x015F, 0x0053}, {0x015E, 0x015F, 0x0053}, /* 015E */
2061 {0x0160, 0x0161, 0x0053}, {0x0160, 0x0161, 0x0053}, /* 0160 */
2062 {0x0162, 0x0163, 0x0054}, {0x0162, 0x0163, 0x0054}, /* 0162 */
2063 {0x0164, 0x0165, 0x0054}, {0x0164, 0x0165, 0x0054}, /* 0164 */
2064 {0x0166, 0x0167, 0x0166}, {0x0166, 0x0167, 0x0166}, /* 0166 */
2065 {0x0168, 0x0169, 0x0055}, {0x0168, 0x0169, 0x0055}, /* 0168 */
2066 {0x016A, 0x016B, 0x0055}, {0x016A, 0x016B, 0x0055}, /* 016A */
2067 {0x016C, 0x016D, 0x0055}, {0x016C, 0x016D, 0x0055}, /* 016C */
2068 {0x016E, 0x016F, 0x0055}, {0x016E, 0x016F, 0x0055}, /* 016E */
2069 {0x0170, 0x0171, 0x0055}, {0x0170, 0x0171, 0x0055}, /* 0170 */
2070 {0x0172, 0x0173, 0x0055}, {0x0172, 0x0173, 0x0055}, /* 0172 */
2071 {0x0174, 0x0175, 0x0057}, {0x0174, 0x0175, 0x0057}, /* 0174 */
2072 {0x0176, 0x0177, 0x0059}, {0x0176, 0x0177, 0x0059}, /* 0176 */
2073 {0x0178, 0x00FF, 0x0059}, {0x0179, 0x017A, 0x005A}, /* 0178 */
2074 {0x0179, 0x017A, 0x005A}, {0x017B, 0x017C, 0x005A}, /* 017A */
2075 {0x017B, 0x017C, 0x005A}, {0x017D, 0x017E, 0x005A}, /* 017C */
2076 {0x017D, 0x017E, 0x005A}, {0x0053, 0x017F, 0x0053}, /* 017E */
2077 {0x0243, 0x0180, 0x0243}, {0x0181, 0x0253, 0x0181}, /* 0180 */
2078 {0x0182, 0x0183, 0x0182}, {0x0182, 0x0183, 0x0182}, /* 0182 */
2079 {0x0184, 0x0185, 0x0184}, {0x0184, 0x0185, 0x0184}, /* 0184 */
2080 {0x0186, 0x0254, 0x0186}, {0x0187, 0x0188, 0x0187}, /* 0186 */
2081 {0x0187, 0x0188, 0x0187}, {0x0189, 0x0256, 0x0189}, /* 0188 */
2082 {0x018A, 0x0257, 0x018A}, {0x018B, 0x018C, 0x018B}, /* 018A */
2083 {0x018B, 0x018C, 0x018B}, {0x018D, 0x018D, 0x018D}, /* 018C */
2084 {0x018E, 0x01DD, 0x018E}, {0x018F, 0x0259, 0x018F}, /* 018E */
2085 {0x0190, 0x025B, 0x0190}, {0x0191, 0x0192, 0x0191}, /* 0190 */
2086 {0x0191, 0x0192, 0x0191}, {0x0193, 0x0260, 0x0193}, /* 0192 */
2087 {0x0194, 0x0263, 0x0194}, {0x01F6, 0x0195, 0x01F6}, /* 0194 */
2088 {0x0196, 0x0269, 0x0196}, {0x0197, 0x0268, 0x0197}, /* 0196 */
2089 {0x0198, 0x0199, 0x0198}, {0x0198, 0x0199, 0x0198}, /* 0198 */
2090 {0x023D, 0x019A, 0x023D}, {0x019B, 0x019B, 0x019B}, /* 019A */
2091 {0x019C, 0x026F, 0x019C}, {0x019D, 0x0272, 0x019D}, /* 019C */
2092 {0x0220, 0x019E, 0x0220}, {0x019F, 0x0275, 0x019F}, /* 019E */
2093 {0x01A0, 0x01A1, 0x004F}, {0x01A0, 0x01A1, 0x004F}, /* 01A0 */
2094 {0x01A2, 0x01A3, 0x01A2}, {0x01A2, 0x01A3, 0x01A2}, /* 01A2 */
2095 {0x01A4, 0x01A5, 0x01A4}, {0x01A4, 0x01A5, 0x01A4}, /* 01A4 */
2096 {0x01A6, 0x0280, 0x01A6}, {0x01A7, 0x01A8, 0x01A7}, /* 01A6 */
2097 {0x01A7, 0x01A8, 0x01A7}, {0x01A9, 0x0283, 0x01A9}, /* 01A8 */
2098 {0x01AA, 0x01AA, 0x01AA}, {0x01AB, 0x01AB, 0x01AB}, /* 01AA */
2099 {0x01AC, 0x01AD, 0x01AC}, {0x01AC, 0x01AD, 0x01AC}, /* 01AC */
2100 {0x01AE, 0x0288, 0x01AE}, {0x01AF, 0x01B0, 0x0055}, /* 01AE */
2101 {0x01AF, 0x01B0, 0x0055}, {0x01B1, 0x028A, 0x01B1}, /* 01B0 */
2102 {0x01B2, 0x028B, 0x01B2}, {0x01B3, 0x01B4, 0x01B3}, /* 01B2 */
2103 {0x01B3, 0x01B4, 0x01B3}, {0x01B5, 0x01B6, 0x01B5}, /* 01B4 */
2104 {0x01B5, 0x01B6, 0x01B5}, {0x01B7, 0x0292, 0x01B7}, /* 01B6 */
2105 {0x01B8, 0x01B9, 0x01B8}, {0x01B8, 0x01B9, 0x01B8}, /* 01B8 */
2106 {0x01BA, 0x01BA, 0x01BA}, {0x01BB, 0x01BB, 0x01BB}, /* 01BA */
2107 {0x01BC, 0x01BD, 0x01BC}, {0x01BC, 0x01BD, 0x01BC}, /* 01BC */
2108 {0x01BE, 0x01BE, 0x01BE}, {0x01F7, 0x01BF, 0x01F7}, /* 01BE */
2109 {0x01C0, 0x01C0, 0x01C0}, {0x01C1, 0x01C1, 0x01C1}, /* 01C0 */
2110 {0x01C2, 0x01C2, 0x01C2}, {0x01C3, 0x01C3, 0x01C3}, /* 01C2 */
2111 {0x01C4, 0x01C6, 0x01C4}, {0x01C4, 0x01C6, 0x01C4}, /* 01C4 */
2112 {0x01C4, 0x01C6, 0x01C4}, {0x01C7, 0x01C9, 0x01C7}, /* 01C6 */
2113 {0x01C7, 0x01C9, 0x01C7}, {0x01C7, 0x01C9, 0x01C7}, /* 01C8 */
2114 {0x01CA, 0x01CC, 0x01CA}, {0x01CA, 0x01CC, 0x01CA}, /* 01CA */
2115 {0x01CA, 0x01CC, 0x01CA}, {0x01CD, 0x01CE, 0x0041}, /* 01CC */
2116 {0x01CD, 0x01CE, 0x0041}, {0x01CF, 0x01D0, 0x0049}, /* 01CE */
2117 {0x01CF, 0x01D0, 0x0049}, {0x01D1, 0x01D2, 0x004F}, /* 01D0 */
2118 {0x01D1, 0x01D2, 0x004F}, {0x01D3, 0x01D4, 0x0055}, /* 01D2 */
2119 {0x01D3, 0x01D4, 0x0055}, {0x01D5, 0x01D6, 0x0055}, /* 01D4 */
2120 {0x01D5, 0x01D6, 0x0055}, {0x01D7, 0x01D8, 0x0055}, /* 01D6 */
2121 {0x01D7, 0x01D8, 0x0055}, {0x01D9, 0x01DA, 0x0055}, /* 01D8 */
2122 {0x01D9, 0x01DA, 0x0055}, {0x01DB, 0x01DC, 0x0055}, /* 01DA */
2123 {0x01DB, 0x01DC, 0x0055}, {0x018E, 0x01DD, 0x018E}, /* 01DC */
2124 {0x01DE, 0x01DF, 0x0041}, {0x01DE, 0x01DF, 0x0041}, /* 01DE */
2125 {0x01E0, 0x01E1, 0x0041}, {0x01E0, 0x01E1, 0x0041}, /* 01E0 */
2126 {0x01E2, 0x01E3, 0x00C6}, {0x01E2, 0x01E3, 0x00C6}, /* 01E2 */
2127 {0x01E4, 0x01E5, 0x01E4}, {0x01E4, 0x01E5, 0x01E4}, /* 01E4 */
2128 {0x01E6, 0x01E7, 0x0047}, {0x01E6, 0x01E7, 0x0047}, /* 01E6 */
2129 {0x01E8, 0x01E9, 0x004B}, {0x01E8, 0x01E9, 0x004B}, /* 01E8 */
2130 {0x01EA, 0x01EB, 0x004F}, {0x01EA, 0x01EB, 0x004F}, /* 01EA */
2131 {0x01EC, 0x01ED, 0x004F}, {0x01EC, 0x01ED, 0x004F}, /* 01EC */
2132 {0x01EE, 0x01EF, 0x01B7}, {0x01EE, 0x01EF, 0x01B7}, /* 01EE */
2133 {0x01F0, 0x01F0, 0x004A}, {0x01F1, 0x01F3, 0x01F1}, /* 01F0 */
2134 {0x01F1, 0x01F3, 0x01F1}, {0x01F1, 0x01F3, 0x01F1}, /* 01F2 */
2135 {0x01F4, 0x01F5, 0x0047}, {0x01F4, 0x01F5, 0x0047}, /* 01F4 */
2136 {0x01F6, 0x0195, 0x01F6}, {0x01F7, 0x01BF, 0x01F7}, /* 01F6 */
2137 {0x01F8, 0x01F9, 0x004E}, {0x01F8, 0x01F9, 0x004E}, /* 01F8 */
2138 {0x01FA, 0x01FB, 0x0041}, {0x01FA, 0x01FB, 0x0041}, /* 01FA */
2139 {0x01FC, 0x01FD, 0x00C6}, {0x01FC, 0x01FD, 0x00C6}, /* 01FC */
2140 {0x01FE, 0x01FF, 0x00D8}, {0x01FE, 0x01FF, 0x00D8} /* 01FE */
2141 };
2142
2143 static const MY_UNICASE_CHARACTER u520p02[] = {
2144 {0x0200, 0x0201, 0x0041}, {0x0200, 0x0201, 0x0041}, /* 0200 */
2145 {0x0202, 0x0203, 0x0041}, {0x0202, 0x0203, 0x0041}, /* 0202 */
2146 {0x0204, 0x0205, 0x0045}, {0x0204, 0x0205, 0x0045}, /* 0204 */
2147 {0x0206, 0x0207, 0x0045}, {0x0206, 0x0207, 0x0045}, /* 0206 */
2148 {0x0208, 0x0209, 0x0049}, {0x0208, 0x0209, 0x0049}, /* 0208 */
2149 {0x020A, 0x020B, 0x0049}, {0x020A, 0x020B, 0x0049}, /* 020A */
2150 {0x020C, 0x020D, 0x004F}, {0x020C, 0x020D, 0x004F}, /* 020C */
2151 {0x020E, 0x020F, 0x004F}, {0x020E, 0x020F, 0x004F}, /* 020E */
2152 {0x0210, 0x0211, 0x0052}, {0x0210, 0x0211, 0x0052}, /* 0210 */
2153 {0x0212, 0x0213, 0x0052}, {0x0212, 0x0213, 0x0052}, /* 0212 */
2154 {0x0214, 0x0215, 0x0055}, {0x0214, 0x0215, 0x0055}, /* 0214 */
2155 {0x0216, 0x0217, 0x0055}, {0x0216, 0x0217, 0x0055}, /* 0216 */
2156 {0x0218, 0x0219, 0x0053}, {0x0218, 0x0219, 0x0053}, /* 0218 */
2157 {0x021A, 0x021B, 0x0054}, {0x021A, 0x021B, 0x0054}, /* 021A */
2158 {0x021C, 0x021D, 0x021C}, {0x021C, 0x021D, 0x021C}, /* 021C */
2159 {0x021E, 0x021F, 0x0048}, {0x021E, 0x021F, 0x0048}, /* 021E */
2160 {0x0220, 0x019E, 0x0220}, {0x0221, 0x0221, 0x0221}, /* 0220 */
2161 {0x0222, 0x0223, 0x0222}, {0x0222, 0x0223, 0x0222}, /* 0222 */
2162 {0x0224, 0x0225, 0x0224}, {0x0224, 0x0225, 0x0224}, /* 0224 */
2163 {0x0226, 0x0227, 0x0041}, {0x0226, 0x0227, 0x0041}, /* 0226 */
2164 {0x0228, 0x0229, 0x0045}, {0x0228, 0x0229, 0x0045}, /* 0228 */
2165 {0x022A, 0x022B, 0x004F}, {0x022A, 0x022B, 0x004F}, /* 022A */
2166 {0x022C, 0x022D, 0x004F}, {0x022C, 0x022D, 0x004F}, /* 022C */
2167 {0x022E, 0x022F, 0x004F}, {0x022E, 0x022F, 0x004F}, /* 022E */
2168 {0x0230, 0x0231, 0x004F}, {0x0230, 0x0231, 0x004F}, /* 0230 */
2169 {0x0232, 0x0233, 0x0059}, {0x0232, 0x0233, 0x0059}, /* 0232 */
2170 {0x0234, 0x0234, 0x0234}, {0x0235, 0x0235, 0x0235}, /* 0234 */
2171 {0x0236, 0x0236, 0x0236}, {0x0237, 0x0237, 0x0237}, /* 0236 */
2172 {0x0238, 0x0238, 0x0238}, {0x0239, 0x0239, 0x0239}, /* 0238 */
2173 {0x023A, 0x2C65, 0x023A}, {0x023B, 0x023C, 0x023B}, /* 023A */
2174 {0x023B, 0x023C, 0x023B}, {0x023D, 0x019A, 0x023D}, /* 023C */
2175 {0x023E, 0x2C66, 0x023E}, {0x2C7E, 0x023F, 0x2C7E}, /* 023E */
2176 {0x2C7F, 0x0240, 0x2C7F}, {0x0241, 0x0242, 0x0241}, /* 0240 */
2177 {0x0241, 0x0242, 0x0241}, {0x0243, 0x0180, 0x0243}, /* 0242 */
2178 {0x0244, 0x0289, 0x0244}, {0x0245, 0x028C, 0x0245}, /* 0244 */
2179 {0x0246, 0x0247, 0x0246}, {0x0246, 0x0247, 0x0246}, /* 0246 */
2180 {0x0248, 0x0249, 0x0248}, {0x0248, 0x0249, 0x0248}, /* 0248 */
2181 {0x024A, 0x024B, 0x024A}, {0x024A, 0x024B, 0x024A}, /* 024A */
2182 {0x024C, 0x024D, 0x024C}, {0x024C, 0x024D, 0x024C}, /* 024C */
2183 {0x024E, 0x024F, 0x024E}, {0x024E, 0x024F, 0x024E}, /* 024E */
2184 {0x2C6F, 0x0250, 0x2C6F}, {0x2C6D, 0x0251, 0x2C6D}, /* 0250 */
2185 {0x2C70, 0x0252, 0x2C70}, {0x0181, 0x0253, 0x0181}, /* 0252 */
2186 {0x0186, 0x0254, 0x0186}, {0x0255, 0x0255, 0x0255}, /* 0254 */
2187 {0x0189, 0x0256, 0x0189}, {0x018A, 0x0257, 0x018A}, /* 0256 */
2188 {0x0258, 0x0258, 0x0258}, {0x018F, 0x0259, 0x018F}, /* 0258 */
2189 {0x025A, 0x025A, 0x025A}, {0x0190, 0x025B, 0x0190}, /* 025A */
2190 {0x025C, 0x025C, 0x025C}, {0x025D, 0x025D, 0x025D}, /* 025C */
2191 {0x025E, 0x025E, 0x025E}, {0x025F, 0x025F, 0x025F}, /* 025E */
2192 {0x0193, 0x0260, 0x0193}, {0x0261, 0x0261, 0x0261}, /* 0260 */
2193 {0x0262, 0x0262, 0x0262}, {0x0194, 0x0263, 0x0194}, /* 0262 */
2194 {0x0264, 0x0264, 0x0264}, {0x0265, 0x0265, 0x0265}, /* 0264 */
2195 {0x0266, 0x0266, 0x0266}, {0x0267, 0x0267, 0x0267}, /* 0266 */
2196 {0x0197, 0x0268, 0x0197}, {0x0196, 0x0269, 0x0196}, /* 0268 */
2197 {0x026A, 0x026A, 0x026A}, {0x2C62, 0x026B, 0x2C62}, /* 026A */
2198 {0x026C, 0x026C, 0x026C}, {0x026D, 0x026D, 0x026D}, /* 026C */
2199 {0x026E, 0x026E, 0x026E}, {0x019C, 0x026F, 0x019C}, /* 026E */
2200 {0x0270, 0x0270, 0x0270}, {0x2C6E, 0x0271, 0x2C6E}, /* 0270 */
2201 {0x019D, 0x0272, 0x019D}, {0x0273, 0x0273, 0x0273}, /* 0272 */
2202 {0x0274, 0x0274, 0x0274}, {0x019F, 0x0275, 0x019F}, /* 0274 */
2203 {0x0276, 0x0276, 0x0276}, {0x0277, 0x0277, 0x0277}, /* 0276 */
2204 {0x0278, 0x0278, 0x0278}, {0x0279, 0x0279, 0x0279}, /* 0278 */
2205 {0x027A, 0x027A, 0x027A}, {0x027B, 0x027B, 0x027B}, /* 027A */
2206 {0x027C, 0x027C, 0x027C}, {0x2C64, 0x027D, 0x2C64}, /* 027C */
2207 {0x027E, 0x027E, 0x027E}, {0x027F, 0x027F, 0x027F}, /* 027E */
2208 {0x01A6, 0x0280, 0x01A6}, {0x0281, 0x0281, 0x0281}, /* 0280 */
2209 {0x0282, 0x0282, 0x0282}, {0x01A9, 0x0283, 0x01A9}, /* 0282 */
2210 {0x0284, 0x0284, 0x0284}, {0x0285, 0x0285, 0x0285}, /* 0284 */
2211 {0x0286, 0x0286, 0x0286}, {0x0287, 0x0287, 0x0287}, /* 0286 */
2212 {0x01AE, 0x0288, 0x01AE}, {0x0244, 0x0289, 0x0244}, /* 0288 */
2213 {0x01B1, 0x028A, 0x01B1}, {0x01B2, 0x028B, 0x01B2}, /* 028A */
2214 {0x0245, 0x028C, 0x0245}, {0x028D, 0x028D, 0x028D}, /* 028C */
2215 {0x028E, 0x028E, 0x028E}, {0x028F, 0x028F, 0x028F}, /* 028E */
2216 {0x0290, 0x0290, 0x0290}, {0x0291, 0x0291, 0x0291}, /* 0290 */
2217 {0x01B7, 0x0292, 0x01B7}, {0x0293, 0x0293, 0x0293}, /* 0292 */
2218 {0x0294, 0x0294, 0x0294}, {0x0295, 0x0295, 0x0295}, /* 0294 */
2219 {0x0296, 0x0296, 0x0296}, {0x0297, 0x0297, 0x0297}, /* 0296 */
2220 {0x0298, 0x0298, 0x0298}, {0x0299, 0x0299, 0x0299}, /* 0298 */
2221 {0x029A, 0x029A, 0x029A}, {0x029B, 0x029B, 0x029B}, /* 029A */
2222 {0x029C, 0x029C, 0x029C}, {0x029D, 0x029D, 0x029D}, /* 029C */
2223 {0x029E, 0x029E, 0x029E}, {0x029F, 0x029F, 0x029F}, /* 029E */
2224 {0x02A0, 0x02A0, 0x02A0}, {0x02A1, 0x02A1, 0x02A1}, /* 02A0 */
2225 {0x02A2, 0x02A2, 0x02A2}, {0x02A3, 0x02A3, 0x02A3}, /* 02A2 */
2226 {0x02A4, 0x02A4, 0x02A4}, {0x02A5, 0x02A5, 0x02A5}, /* 02A4 */
2227 {0x02A6, 0x02A6, 0x02A6}, {0x02A7, 0x02A7, 0x02A7}, /* 02A6 */
2228 {0x02A8, 0x02A8, 0x02A8}, {0x02A9, 0x02A9, 0x02A9}, /* 02A8 */
2229 {0x02AA, 0x02AA, 0x02AA}, {0x02AB, 0x02AB, 0x02AB}, /* 02AA */
2230 {0x02AC, 0x02AC, 0x02AC}, {0x02AD, 0x02AD, 0x02AD}, /* 02AC */
2231 {0x02AE, 0x02AE, 0x02AE}, {0x02AF, 0x02AF, 0x02AF}, /* 02AE */
2232 {0x02B0, 0x02B0, 0x02B0}, {0x02B1, 0x02B1, 0x02B1}, /* 02B0 */
2233 {0x02B2, 0x02B2, 0x02B2}, {0x02B3, 0x02B3, 0x02B3}, /* 02B2 */
2234 {0x02B4, 0x02B4, 0x02B4}, {0x02B5, 0x02B5, 0x02B5}, /* 02B4 */
2235 {0x02B6, 0x02B6, 0x02B6}, {0x02B7, 0x02B7, 0x02B7}, /* 02B6 */
2236 {0x02B8, 0x02B8, 0x02B8}, {0x02B9, 0x02B9, 0x02B9}, /* 02B8 */
2237 {0x02BA, 0x02BA, 0x02BA}, {0x02BB, 0x02BB, 0x02BB}, /* 02BA */
2238 {0x02BC, 0x02BC, 0x02BC}, {0x02BD, 0x02BD, 0x02BD}, /* 02BC */
2239 {0x02BE, 0x02BE, 0x02BE}, {0x02BF, 0x02BF, 0x02BF}, /* 02BE */
2240 {0x02C0, 0x02C0, 0x02C0}, {0x02C1, 0x02C1, 0x02C1}, /* 02C0 */
2241 {0x02C2, 0x02C2, 0x02C2}, {0x02C3, 0x02C3, 0x02C3}, /* 02C2 */
2242 {0x02C4, 0x02C4, 0x02C4}, {0x02C5, 0x02C5, 0x02C5}, /* 02C4 */
2243 {0x02C6, 0x02C6, 0x02C6}, {0x02C7, 0x02C7, 0x02C7}, /* 02C6 */
2244 {0x02C8, 0x02C8, 0x02C8}, {0x02C9, 0x02C9, 0x02C9}, /* 02C8 */
2245 {0x02CA, 0x02CA, 0x02CA}, {0x02CB, 0x02CB, 0x02CB}, /* 02CA */
2246 {0x02CC, 0x02CC, 0x02CC}, {0x02CD, 0x02CD, 0x02CD}, /* 02CC */
2247 {0x02CE, 0x02CE, 0x02CE}, {0x02CF, 0x02CF, 0x02CF}, /* 02CE */
2248 {0x02D0, 0x02D0, 0x02D0}, {0x02D1, 0x02D1, 0x02D1}, /* 02D0 */
2249 {0x02D2, 0x02D2, 0x02D2}, {0x02D3, 0x02D3, 0x02D3}, /* 02D2 */
2250 {0x02D4, 0x02D4, 0x02D4}, {0x02D5, 0x02D5, 0x02D5}, /* 02D4 */
2251 {0x02D6, 0x02D6, 0x02D6}, {0x02D7, 0x02D7, 0x02D7}, /* 02D6 */
2252 {0x02D8, 0x02D8, 0x02D8}, {0x02D9, 0x02D9, 0x02D9}, /* 02D8 */
2253 {0x02DA, 0x02DA, 0x02DA}, {0x02DB, 0x02DB, 0x02DB}, /* 02DA */
2254 {0x02DC, 0x02DC, 0x02DC}, {0x02DD, 0x02DD, 0x02DD}, /* 02DC */
2255 {0x02DE, 0x02DE, 0x02DE}, {0x02DF, 0x02DF, 0x02DF}, /* 02DE */
2256 {0x02E0, 0x02E0, 0x02E0}, {0x02E1, 0x02E1, 0x02E1}, /* 02E0 */
2257 {0x02E2, 0x02E2, 0x02E2}, {0x02E3, 0x02E3, 0x02E3}, /* 02E2 */
2258 {0x02E4, 0x02E4, 0x02E4}, {0x02E5, 0x02E5, 0x02E5}, /* 02E4 */
2259 {0x02E6, 0x02E6, 0x02E6}, {0x02E7, 0x02E7, 0x02E7}, /* 02E6 */
2260 {0x02E8, 0x02E8, 0x02E8}, {0x02E9, 0x02E9, 0x02E9}, /* 02E8 */
2261 {0x02EA, 0x02EA, 0x02EA}, {0x02EB, 0x02EB, 0x02EB}, /* 02EA */
2262 {0x02EC, 0x02EC, 0x02EC}, {0x02ED, 0x02ED, 0x02ED}, /* 02EC */
2263 {0x02EE, 0x02EE, 0x02EE}, {0x02EF, 0x02EF, 0x02EF}, /* 02EE */
2264 {0x02F0, 0x02F0, 0x02F0}, {0x02F1, 0x02F1, 0x02F1}, /* 02F0 */
2265 {0x02F2, 0x02F2, 0x02F2}, {0x02F3, 0x02F3, 0x02F3}, /* 02F2 */
2266 {0x02F4, 0x02F4, 0x02F4}, {0x02F5, 0x02F5, 0x02F5}, /* 02F4 */
2267 {0x02F6, 0x02F6, 0x02F6}, {0x02F7, 0x02F7, 0x02F7}, /* 02F6 */
2268 {0x02F8, 0x02F8, 0x02F8}, {0x02F9, 0x02F9, 0x02F9}, /* 02F8 */
2269 {0x02FA, 0x02FA, 0x02FA}, {0x02FB, 0x02FB, 0x02FB}, /* 02FA */
2270 {0x02FC, 0x02FC, 0x02FC}, {0x02FD, 0x02FD, 0x02FD}, /* 02FC */
2271 {0x02FE, 0x02FE, 0x02FE}, {0x02FF, 0x02FF, 0x02FF} /* 02FE */
2272 };
2273
2274 static const MY_UNICASE_CHARACTER u520p03[] = {
2275 {0x0300, 0x0300, 0x0300}, {0x0301, 0x0301, 0x0301}, /* 0300 */
2276 {0x0302, 0x0302, 0x0302}, {0x0303, 0x0303, 0x0303}, /* 0302 */
2277 {0x0304, 0x0304, 0x0304}, {0x0305, 0x0305, 0x0305}, /* 0304 */
2278 {0x0306, 0x0306, 0x0306}, {0x0307, 0x0307, 0x0307}, /* 0306 */
2279 {0x0308, 0x0308, 0x0308}, {0x0309, 0x0309, 0x0309}, /* 0308 */
2280 {0x030A, 0x030A, 0x030A}, {0x030B, 0x030B, 0x030B}, /* 030A */
2281 {0x030C, 0x030C, 0x030C}, {0x030D, 0x030D, 0x030D}, /* 030C */
2282 {0x030E, 0x030E, 0x030E}, {0x030F, 0x030F, 0x030F}, /* 030E */
2283 {0x0310, 0x0310, 0x0310}, {0x0311, 0x0311, 0x0311}, /* 0310 */
2284 {0x0312, 0x0312, 0x0312}, {0x0313, 0x0313, 0x0313}, /* 0312 */
2285 {0x0314, 0x0314, 0x0314}, {0x0315, 0x0315, 0x0315}, /* 0314 */
2286 {0x0316, 0x0316, 0x0316}, {0x0317, 0x0317, 0x0317}, /* 0316 */
2287 {0x0318, 0x0318, 0x0318}, {0x0319, 0x0319, 0x0319}, /* 0318 */
2288 {0x031A, 0x031A, 0x031A}, {0x031B, 0x031B, 0x031B}, /* 031A */
2289 {0x031C, 0x031C, 0x031C}, {0x031D, 0x031D, 0x031D}, /* 031C */
2290 {0x031E, 0x031E, 0x031E}, {0x031F, 0x031F, 0x031F}, /* 031E */
2291 {0x0320, 0x0320, 0x0320}, {0x0321, 0x0321, 0x0321}, /* 0320 */
2292 {0x0322, 0x0322, 0x0322}, {0x0323, 0x0323, 0x0323}, /* 0322 */
2293 {0x0324, 0x0324, 0x0324}, {0x0325, 0x0325, 0x0325}, /* 0324 */
2294 {0x0326, 0x0326, 0x0326}, {0x0327, 0x0327, 0x0327}, /* 0326 */
2295 {0x0328, 0x0328, 0x0328}, {0x0329, 0x0329, 0x0329}, /* 0328 */
2296 {0x032A, 0x032A, 0x032A}, {0x032B, 0x032B, 0x032B}, /* 032A */
2297 {0x032C, 0x032C, 0x032C}, {0x032D, 0x032D, 0x032D}, /* 032C */
2298 {0x032E, 0x032E, 0x032E}, {0x032F, 0x032F, 0x032F}, /* 032E */
2299 {0x0330, 0x0330, 0x0330}, {0x0331, 0x0331, 0x0331}, /* 0330 */
2300 {0x0332, 0x0332, 0x0332}, {0x0333, 0x0333, 0x0333}, /* 0332 */
2301 {0x0334, 0x0334, 0x0334}, {0x0335, 0x0335, 0x0335}, /* 0334 */
2302 {0x0336, 0x0336, 0x0336}, {0x0337, 0x0337, 0x0337}, /* 0336 */
2303 {0x0338, 0x0338, 0x0338}, {0x0339, 0x0339, 0x0339}, /* 0338 */
2304 {0x033A, 0x033A, 0x033A}, {0x033B, 0x033B, 0x033B}, /* 033A */
2305 {0x033C, 0x033C, 0x033C}, {0x033D, 0x033D, 0x033D}, /* 033C */
2306 {0x033E, 0x033E, 0x033E}, {0x033F, 0x033F, 0x033F}, /* 033E */
2307 {0x0340, 0x0340, 0x0340}, {0x0341, 0x0341, 0x0341}, /* 0340 */
2308 {0x0342, 0x0342, 0x0342}, {0x0343, 0x0343, 0x0343}, /* 0342 */
2309 {0x0344, 0x0344, 0x0344}, {0x0399, 0x0345, 0x0399}, /* 0344 */
2310 {0x0346, 0x0346, 0x0346}, {0x0347, 0x0347, 0x0347}, /* 0346 */
2311 {0x0348, 0x0348, 0x0348}, {0x0349, 0x0349, 0x0349}, /* 0348 */
2312 {0x034A, 0x034A, 0x034A}, {0x034B, 0x034B, 0x034B}, /* 034A */
2313 {0x034C, 0x034C, 0x034C}, {0x034D, 0x034D, 0x034D}, /* 034C */
2314 {0x034E, 0x034E, 0x034E}, {0x034F, 0x034F, 0x034F}, /* 034E */
2315 {0x0350, 0x0350, 0x0350}, {0x0351, 0x0351, 0x0351}, /* 0350 */
2316 {0x0352, 0x0352, 0x0352}, {0x0353, 0x0353, 0x0353}, /* 0352 */
2317 {0x0354, 0x0354, 0x0354}, {0x0355, 0x0355, 0x0355}, /* 0354 */
2318 {0x0356, 0x0356, 0x0356}, {0x0357, 0x0357, 0x0357}, /* 0356 */
2319 {0x0358, 0x0358, 0x0358}, {0x0359, 0x0359, 0x0359}, /* 0358 */
2320 {0x035A, 0x035A, 0x035A}, {0x035B, 0x035B, 0x035B}, /* 035A */
2321 {0x035C, 0x035C, 0x035C}, {0x035D, 0x035D, 0x035D}, /* 035C */
2322 {0x035E, 0x035E, 0x035E}, {0x035F, 0x035F, 0x035F}, /* 035E */
2323 {0x0360, 0x0360, 0x0360}, {0x0361, 0x0361, 0x0361}, /* 0360 */
2324 {0x0362, 0x0362, 0x0362}, {0x0363, 0x0363, 0x0363}, /* 0362 */
2325 {0x0364, 0x0364, 0x0364}, {0x0365, 0x0365, 0x0365}, /* 0364 */
2326 {0x0366, 0x0366, 0x0366}, {0x0367, 0x0367, 0x0367}, /* 0366 */
2327 {0x0368, 0x0368, 0x0368}, {0x0369, 0x0369, 0x0369}, /* 0368 */
2328 {0x036A, 0x036A, 0x036A}, {0x036B, 0x036B, 0x036B}, /* 036A */
2329 {0x036C, 0x036C, 0x036C}, {0x036D, 0x036D, 0x036D}, /* 036C */
2330 {0x036E, 0x036E, 0x036E}, {0x036F, 0x036F, 0x036F}, /* 036E */
2331 {0x0370, 0x0371, 0x0370}, {0x0370, 0x0371, 0x0370}, /* 0370 */
2332 {0x0372, 0x0373, 0x0372}, {0x0372, 0x0373, 0x0372}, /* 0372 */
2333 {0x0374, 0x0374, 0x0374}, {0x0375, 0x0375, 0x0375}, /* 0374 */
2334 {0x0376, 0x0377, 0x0376}, {0x0376, 0x0377, 0x0376}, /* 0376 */
2335 {0x0378, 0x0378, 0x0378}, {0x0379, 0x0379, 0x0379}, /* 0378 */
2336 {0x037A, 0x037A, 0x037A}, {0x03FD, 0x037B, 0x03FD}, /* 037A */
2337 {0x03FE, 0x037C, 0x03FE}, {0x03FF, 0x037D, 0x03FF}, /* 037C */
2338 {0x037E, 0x037E, 0x037E}, {0x037F, 0x037F, 0x037F}, /* 037E */
2339 {0x0380, 0x0380, 0x0380}, {0x0381, 0x0381, 0x0381}, /* 0380 */
2340 {0x0382, 0x0382, 0x0382}, {0x0383, 0x0383, 0x0383}, /* 0382 */
2341 {0x0384, 0x0384, 0x0384}, {0x0385, 0x0385, 0x0385}, /* 0384 */
2342 {0x0386, 0x03AC, 0x0391}, {0x0387, 0x0387, 0x0387}, /* 0386 */
2343 {0x0388, 0x03AD, 0x0395}, {0x0389, 0x03AE, 0x0397}, /* 0388 */
2344 {0x038A, 0x03AF, 0x0399}, {0x038B, 0x038B, 0x038B}, /* 038A */
2345 {0x038C, 0x03CC, 0x039F}, {0x038D, 0x038D, 0x038D}, /* 038C */
2346 {0x038E, 0x03CD, 0x03A5}, {0x038F, 0x03CE, 0x03A9}, /* 038E */
2347 {0x0390, 0x0390, 0x0399}, {0x0391, 0x03B1, 0x0391}, /* 0390 */
2348 {0x0392, 0x03B2, 0x0392}, {0x0393, 0x03B3, 0x0393}, /* 0392 */
2349 {0x0394, 0x03B4, 0x0394}, {0x0395, 0x03B5, 0x0395}, /* 0394 */
2350 {0x0396, 0x03B6, 0x0396}, {0x0397, 0x03B7, 0x0397}, /* 0396 */
2351 {0x0398, 0x03B8, 0x0398}, {0x0399, 0x03B9, 0x0399}, /* 0398 */
2352 {0x039A, 0x03BA, 0x039A}, {0x039B, 0x03BB, 0x039B}, /* 039A */
2353 {0x039C, 0x03BC, 0x039C}, {0x039D, 0x03BD, 0x039D}, /* 039C */
2354 {0x039E, 0x03BE, 0x039E}, {0x039F, 0x03BF, 0x039F}, /* 039E */
2355 {0x03A0, 0x03C0, 0x03A0}, {0x03A1, 0x03C1, 0x03A1}, /* 03A0 */
2356 {0x03A2, 0x03A2, 0x03A2}, {0x03A3, 0x03C3, 0x03A3}, /* 03A2 */
2357 {0x03A4, 0x03C4, 0x03A4}, {0x03A5, 0x03C5, 0x03A5}, /* 03A4 */
2358 {0x03A6, 0x03C6, 0x03A6}, {0x03A7, 0x03C7, 0x03A7}, /* 03A6 */
2359 {0x03A8, 0x03C8, 0x03A8}, {0x03A9, 0x03C9, 0x03A9}, /* 03A8 */
2360 {0x03AA, 0x03CA, 0x0399}, {0x03AB, 0x03CB, 0x03A5}, /* 03AA */
2361 {0x0386, 0x03AC, 0x0391}, {0x0388, 0x03AD, 0x0395}, /* 03AC */
2362 {0x0389, 0x03AE, 0x0397}, {0x038A, 0x03AF, 0x0399}, /* 03AE */
2363 {0x03B0, 0x03B0, 0x03A5}, {0x0391, 0x03B1, 0x0391}, /* 03B0 */
2364 {0x0392, 0x03B2, 0x0392}, {0x0393, 0x03B3, 0x0393}, /* 03B2 */
2365 {0x0394, 0x03B4, 0x0394}, {0x0395, 0x03B5, 0x0395}, /* 03B4 */
2366 {0x0396, 0x03B6, 0x0396}, {0x0397, 0x03B7, 0x0397}, /* 03B6 */
2367 {0x0398, 0x03B8, 0x0398}, {0x0399, 0x03B9, 0x0399}, /* 03B8 */
2368 {0x039A, 0x03BA, 0x039A}, {0x039B, 0x03BB, 0x039B}, /* 03BA */
2369 {0x039C, 0x03BC, 0x039C}, {0x039D, 0x03BD, 0x039D}, /* 03BC */
2370 {0x039E, 0x03BE, 0x039E}, {0x039F, 0x03BF, 0x039F}, /* 03BE */
2371 {0x03A0, 0x03C0, 0x03A0}, {0x03A1, 0x03C1, 0x03A1}, /* 03C0 */
2372 {0x03A3, 0x03C2, 0x03A3}, {0x03A3, 0x03C3, 0x03A3}, /* 03C2 */
2373 {0x03A4, 0x03C4, 0x03A4}, {0x03A5, 0x03C5, 0x03A5}, /* 03C4 */
2374 {0x03A6, 0x03C6, 0x03A6}, {0x03A7, 0x03C7, 0x03A7}, /* 03C6 */
2375 {0x03A8, 0x03C8, 0x03A8}, {0x03A9, 0x03C9, 0x03A9}, /* 03C8 */
2376 {0x03AA, 0x03CA, 0x0399}, {0x03AB, 0x03CB, 0x03A5}, /* 03CA */
2377 {0x038C, 0x03CC, 0x039F}, {0x038E, 0x03CD, 0x03A5}, /* 03CC */
2378 {0x038F, 0x03CE, 0x03A9}, {0x03CF, 0x03D7, 0x03CF}, /* 03CE */
2379 {0x0392, 0x03D0, 0x0392}, {0x0398, 0x03D1, 0x0398}, /* 03D0 */
2380 {0x03D2, 0x03D2, 0x03D2}, {0x03D3, 0x03D3, 0x03D2}, /* 03D2 */
2381 {0x03D4, 0x03D4, 0x03D2}, {0x03A6, 0x03D5, 0x03A6}, /* 03D4 */
2382 {0x03A0, 0x03D6, 0x03A0}, {0x03CF, 0x03D7, 0x03CF}, /* 03D6 */
2383 {0x03D8, 0x03D9, 0x03D8}, {0x03D8, 0x03D9, 0x03D8}, /* 03D8 */
2384 {0x03DA, 0x03DB, 0x03DA}, {0x03DA, 0x03DB, 0x03DA}, /* 03DA */
2385 {0x03DC, 0x03DD, 0x03DC}, {0x03DC, 0x03DD, 0x03DC}, /* 03DC */
2386 {0x03DE, 0x03DF, 0x03DE}, {0x03DE, 0x03DF, 0x03DE}, /* 03DE */
2387 {0x03E0, 0x03E1, 0x03E0}, {0x03E0, 0x03E1, 0x03E0}, /* 03E0 */
2388 {0x03E2, 0x03E3, 0x03E2}, {0x03E2, 0x03E3, 0x03E2}, /* 03E2 */
2389 {0x03E4, 0x03E5, 0x03E4}, {0x03E4, 0x03E5, 0x03E4}, /* 03E4 */
2390 {0x03E6, 0x03E7, 0x03E6}, {0x03E6, 0x03E7, 0x03E6}, /* 03E6 */
2391 {0x03E8, 0x03E9, 0x03E8}, {0x03E8, 0x03E9, 0x03E8}, /* 03E8 */
2392 {0x03EA, 0x03EB, 0x03EA}, {0x03EA, 0x03EB, 0x03EA}, /* 03EA */
2393 {0x03EC, 0x03ED, 0x03EC}, {0x03EC, 0x03ED, 0x03EC}, /* 03EC */
2394 {0x03EE, 0x03EF, 0x03EE}, {0x03EE, 0x03EF, 0x03EE}, /* 03EE */
2395 {0x039A, 0x03F0, 0x039A}, {0x03A1, 0x03F1, 0x03A1}, /* 03F0 */
2396 {0x03F9, 0x03F2, 0x03F9}, {0x03F3, 0x03F3, 0x03F3}, /* 03F2 */
2397 {0x03F4, 0x03B8, 0x03F4}, {0x0395, 0x03F5, 0x0395}, /* 03F4 */
2398 {0x03F6, 0x03F6, 0x03F6}, {0x03F7, 0x03F8, 0x03F7}, /* 03F6 */
2399 {0x03F7, 0x03F8, 0x03F7}, {0x03F9, 0x03F2, 0x03F9}, /* 03F8 */
2400 {0x03FA, 0x03FB, 0x03FA}, {0x03FA, 0x03FB, 0x03FA}, /* 03FA */
2401 {0x03FC, 0x03FC, 0x03FC}, {0x03FD, 0x037B, 0x03FD}, /* 03FC */
2402 {0x03FE, 0x037C, 0x03FE}, {0x03FF, 0x037D, 0x03FF} /* 03FE */
2403 };
2404
2405 static const MY_UNICASE_CHARACTER u520p04[] = {
2406 {0x0400, 0x0450, 0x0415}, {0x0401, 0x0451, 0x0415}, /* 0400 */
2407 {0x0402, 0x0452, 0x0402}, {0x0403, 0x0453, 0x0413}, /* 0402 */
2408 {0x0404, 0x0454, 0x0404}, {0x0405, 0x0455, 0x0405}, /* 0404 */
2409 {0x0406, 0x0456, 0x0406}, {0x0407, 0x0457, 0x0406}, /* 0406 */
2410 {0x0408, 0x0458, 0x0408}, {0x0409, 0x0459, 0x0409}, /* 0408 */
2411 {0x040A, 0x045A, 0x040A}, {0x040B, 0x045B, 0x040B}, /* 040A */
2412 {0x040C, 0x045C, 0x041A}, {0x040D, 0x045D, 0x0418}, /* 040C */
2413 {0x040E, 0x045E, 0x0423}, {0x040F, 0x045F, 0x040F}, /* 040E */
2414 {0x0410, 0x0430, 0x0410}, {0x0411, 0x0431, 0x0411}, /* 0410 */
2415 {0x0412, 0x0432, 0x0412}, {0x0413, 0x0433, 0x0413}, /* 0412 */
2416 {0x0414, 0x0434, 0x0414}, {0x0415, 0x0435, 0x0415}, /* 0414 */
2417 {0x0416, 0x0436, 0x0416}, {0x0417, 0x0437, 0x0417}, /* 0416 */
2418 {0x0418, 0x0438, 0x0418}, {0x0419, 0x0439, 0x0419}, /* 0418 */
2419 {0x041A, 0x043A, 0x041A}, {0x041B, 0x043B, 0x041B}, /* 041A */
2420 {0x041C, 0x043C, 0x041C}, {0x041D, 0x043D, 0x041D}, /* 041C */
2421 {0x041E, 0x043E, 0x041E}, {0x041F, 0x043F, 0x041F}, /* 041E */
2422 {0x0420, 0x0440, 0x0420}, {0x0421, 0x0441, 0x0421}, /* 0420 */
2423 {0x0422, 0x0442, 0x0422}, {0x0423, 0x0443, 0x0423}, /* 0422 */
2424 {0x0424, 0x0444, 0x0424}, {0x0425, 0x0445, 0x0425}, /* 0424 */
2425 {0x0426, 0x0446, 0x0426}, {0x0427, 0x0447, 0x0427}, /* 0426 */
2426 {0x0428, 0x0448, 0x0428}, {0x0429, 0x0449, 0x0429}, /* 0428 */
2427 {0x042A, 0x044A, 0x042A}, {0x042B, 0x044B, 0x042B}, /* 042A */
2428 {0x042C, 0x044C, 0x042C}, {0x042D, 0x044D, 0x042D}, /* 042C */
2429 {0x042E, 0x044E, 0x042E}, {0x042F, 0x044F, 0x042F}, /* 042E */
2430 {0x0410, 0x0430, 0x0410}, {0x0411, 0x0431, 0x0411}, /* 0430 */
2431 {0x0412, 0x0432, 0x0412}, {0x0413, 0x0433, 0x0413}, /* 0432 */
2432 {0x0414, 0x0434, 0x0414}, {0x0415, 0x0435, 0x0415}, /* 0434 */
2433 {0x0416, 0x0436, 0x0416}, {0x0417, 0x0437, 0x0417}, /* 0436 */
2434 {0x0418, 0x0438, 0x0418}, {0x0419, 0x0439, 0x0419}, /* 0438 */
2435 {0x041A, 0x043A, 0x041A}, {0x041B, 0x043B, 0x041B}, /* 043A */
2436 {0x041C, 0x043C, 0x041C}, {0x041D, 0x043D, 0x041D}, /* 043C */
2437 {0x041E, 0x043E, 0x041E}, {0x041F, 0x043F, 0x041F}, /* 043E */
2438 {0x0420, 0x0440, 0x0420}, {0x0421, 0x0441, 0x0421}, /* 0440 */
2439 {0x0422, 0x0442, 0x0422}, {0x0423, 0x0443, 0x0423}, /* 0442 */
2440 {0x0424, 0x0444, 0x0424}, {0x0425, 0x0445, 0x0425}, /* 0444 */
2441 {0x0426, 0x0446, 0x0426}, {0x0427, 0x0447, 0x0427}, /* 0446 */
2442 {0x0428, 0x0448, 0x0428}, {0x0429, 0x0449, 0x0429}, /* 0448 */
2443 {0x042A, 0x044A, 0x042A}, {0x042B, 0x044B, 0x042B}, /* 044A */
2444 {0x042C, 0x044C, 0x042C}, {0x042D, 0x044D, 0x042D}, /* 044C */
2445 {0x042E, 0x044E, 0x042E}, {0x042F, 0x044F, 0x042F}, /* 044E */
2446 {0x0400, 0x0450, 0x0415}, {0x0401, 0x0451, 0x0415}, /* 0450 */
2447 {0x0402, 0x0452, 0x0402}, {0x0403, 0x0453, 0x0413}, /* 0452 */
2448 {0x0404, 0x0454, 0x0404}, {0x0405, 0x0455, 0x0405}, /* 0454 */
2449 {0x0406, 0x0456, 0x0406}, {0x0407, 0x0457, 0x0406}, /* 0456 */
2450 {0x0408, 0x0458, 0x0408}, {0x0409, 0x0459, 0x0409}, /* 0458 */
2451 {0x040A, 0x045A, 0x040A}, {0x040B, 0x045B, 0x040B}, /* 045A */
2452 {0x040C, 0x045C, 0x041A}, {0x040D, 0x045D, 0x0418}, /* 045C */
2453 {0x040E, 0x045E, 0x0423}, {0x040F, 0x045F, 0x040F}, /* 045E */
2454 {0x0460, 0x0461, 0x0460}, {0x0460, 0x0461, 0x0460}, /* 0460 */
2455 {0x0462, 0x0463, 0x0462}, {0x0462, 0x0463, 0x0462}, /* 0462 */
2456 {0x0464, 0x0465, 0x0464}, {0x0464, 0x0465, 0x0464}, /* 0464 */
2457 {0x0466, 0x0467, 0x0466}, {0x0466, 0x0467, 0x0466}, /* 0466 */
2458 {0x0468, 0x0469, 0x0468}, {0x0468, 0x0469, 0x0468}, /* 0468 */
2459 {0x046A, 0x046B, 0x046A}, {0x046A, 0x046B, 0x046A}, /* 046A */
2460 {0x046C, 0x046D, 0x046C}, {0x046C, 0x046D, 0x046C}, /* 046C */
2461 {0x046E, 0x046F, 0x046E}, {0x046E, 0x046F, 0x046E}, /* 046E */
2462 {0x0470, 0x0471, 0x0470}, {0x0470, 0x0471, 0x0470}, /* 0470 */
2463 {0x0472, 0x0473, 0x0472}, {0x0472, 0x0473, 0x0472}, /* 0472 */
2464 {0x0474, 0x0475, 0x0474}, {0x0474, 0x0475, 0x0474}, /* 0474 */
2465 {0x0476, 0x0477, 0x0474}, {0x0476, 0x0477, 0x0474}, /* 0476 */
2466 {0x0478, 0x0479, 0x0478}, {0x0478, 0x0479, 0x0478}, /* 0478 */
2467 {0x047A, 0x047B, 0x047A}, {0x047A, 0x047B, 0x047A}, /* 047A */
2468 {0x047C, 0x047D, 0x047C}, {0x047C, 0x047D, 0x047C}, /* 047C */
2469 {0x047E, 0x047F, 0x047E}, {0x047E, 0x047F, 0x047E}, /* 047E */
2470 {0x0480, 0x0481, 0x0480}, {0x0480, 0x0481, 0x0480}, /* 0480 */
2471 {0x0482, 0x0482, 0x0482}, {0x0483, 0x0483, 0x0483}, /* 0482 */
2472 {0x0484, 0x0484, 0x0484}, {0x0485, 0x0485, 0x0485}, /* 0484 */
2473 {0x0486, 0x0486, 0x0486}, {0x0487, 0x0487, 0x0487}, /* 0486 */
2474 {0x0488, 0x0488, 0x0488}, {0x0489, 0x0489, 0x0489}, /* 0488 */
2475 {0x048A, 0x048B, 0x048A}, {0x048A, 0x048B, 0x048A}, /* 048A */
2476 {0x048C, 0x048D, 0x048C}, {0x048C, 0x048D, 0x048C}, /* 048C */
2477 {0x048E, 0x048F, 0x048E}, {0x048E, 0x048F, 0x048E}, /* 048E */
2478 {0x0490, 0x0491, 0x0490}, {0x0490, 0x0491, 0x0490}, /* 0490 */
2479 {0x0492, 0x0493, 0x0492}, {0x0492, 0x0493, 0x0492}, /* 0492 */
2480 {0x0494, 0x0495, 0x0494}, {0x0494, 0x0495, 0x0494}, /* 0494 */
2481 {0x0496, 0x0497, 0x0496}, {0x0496, 0x0497, 0x0496}, /* 0496 */
2482 {0x0498, 0x0499, 0x0498}, {0x0498, 0x0499, 0x0498}, /* 0498 */
2483 {0x049A, 0x049B, 0x049A}, {0x049A, 0x049B, 0x049A}, /* 049A */
2484 {0x049C, 0x049D, 0x049C}, {0x049C, 0x049D, 0x049C}, /* 049C */
2485 {0x049E, 0x049F, 0x049E}, {0x049E, 0x049F, 0x049E}, /* 049E */
2486 {0x04A0, 0x04A1, 0x04A0}, {0x04A0, 0x04A1, 0x04A0}, /* 04A0 */
2487 {0x04A2, 0x04A3, 0x04A2}, {0x04A2, 0x04A3, 0x04A2}, /* 04A2 */
2488 {0x04A4, 0x04A5, 0x04A4}, {0x04A4, 0x04A5, 0x04A4}, /* 04A4 */
2489 {0x04A6, 0x04A7, 0x04A6}, {0x04A6, 0x04A7, 0x04A6}, /* 04A6 */
2490 {0x04A8, 0x04A9, 0x04A8}, {0x04A8, 0x04A9, 0x04A8}, /* 04A8 */
2491 {0x04AA, 0x04AB, 0x04AA}, {0x04AA, 0x04AB, 0x04AA}, /* 04AA */
2492 {0x04AC, 0x04AD, 0x04AC}, {0x04AC, 0x04AD, 0x04AC}, /* 04AC */
2493 {0x04AE, 0x04AF, 0x04AE}, {0x04AE, 0x04AF, 0x04AE}, /* 04AE */
2494 {0x04B0, 0x04B1, 0x04B0}, {0x04B0, 0x04B1, 0x04B0}, /* 04B0 */
2495 {0x04B2, 0x04B3, 0x04B2}, {0x04B2, 0x04B3, 0x04B2}, /* 04B2 */
2496 {0x04B4, 0x04B5, 0x04B4}, {0x04B4, 0x04B5, 0x04B4}, /* 04B4 */
2497 {0x04B6, 0x04B7, 0x04B6}, {0x04B6, 0x04B7, 0x04B6}, /* 04B6 */
2498 {0x04B8, 0x04B9, 0x04B8}, {0x04B8, 0x04B9, 0x04B8}, /* 04B8 */
2499 {0x04BA, 0x04BB, 0x04BA}, {0x04BA, 0x04BB, 0x04BA}, /* 04BA */
2500 {0x04BC, 0x04BD, 0x04BC}, {0x04BC, 0x04BD, 0x04BC}, /* 04BC */
2501 {0x04BE, 0x04BF, 0x04BE}, {0x04BE, 0x04BF, 0x04BE}, /* 04BE */
2502 {0x04C0, 0x04CF, 0x04C0}, {0x04C1, 0x04C2, 0x0416}, /* 04C0 */
2503 {0x04C1, 0x04C2, 0x0416}, {0x04C3, 0x04C4, 0x04C3}, /* 04C2 */
2504 {0x04C3, 0x04C4, 0x04C3}, {0x04C5, 0x04C6, 0x04C5}, /* 04C4 */
2505 {0x04C5, 0x04C6, 0x04C5}, {0x04C7, 0x04C8, 0x04C7}, /* 04C6 */
2506 {0x04C7, 0x04C8, 0x04C7}, {0x04C9, 0x04CA, 0x04C9}, /* 04C8 */
2507 {0x04C9, 0x04CA, 0x04C9}, {0x04CB, 0x04CC, 0x04CB}, /* 04CA */
2508 {0x04CB, 0x04CC, 0x04CB}, {0x04CD, 0x04CE, 0x04CD}, /* 04CC */
2509 {0x04CD, 0x04CE, 0x04CD}, {0x04C0, 0x04CF, 0x04C0}, /* 04CE */
2510 {0x04D0, 0x04D1, 0x0410}, {0x04D0, 0x04D1, 0x0410}, /* 04D0 */
2511 {0x04D2, 0x04D3, 0x0410}, {0x04D2, 0x04D3, 0x0410}, /* 04D2 */
2512 {0x04D4, 0x04D5, 0x04D4}, {0x04D4, 0x04D5, 0x04D4}, /* 04D4 */
2513 {0x04D6, 0x04D7, 0x0415}, {0x04D6, 0x04D7, 0x0415}, /* 04D6 */
2514 {0x04D8, 0x04D9, 0x04D8}, {0x04D8, 0x04D9, 0x04D8}, /* 04D8 */
2515 {0x04DA, 0x04DB, 0x04D8}, {0x04DA, 0x04DB, 0x04D8}, /* 04DA */
2516 {0x04DC, 0x04DD, 0x0416}, {0x04DC, 0x04DD, 0x0416}, /* 04DC */
2517 {0x04DE, 0x04DF, 0x0417}, {0x04DE, 0x04DF, 0x0417}, /* 04DE */
2518 {0x04E0, 0x04E1, 0x04E0}, {0x04E0, 0x04E1, 0x04E0}, /* 04E0 */
2519 {0x04E2, 0x04E3, 0x0418}, {0x04E2, 0x04E3, 0x0418}, /* 04E2 */
2520 {0x04E4, 0x04E5, 0x0418}, {0x04E4, 0x04E5, 0x0418}, /* 04E4 */
2521 {0x04E6, 0x04E7, 0x041E}, {0x04E6, 0x04E7, 0x041E}, /* 04E6 */
2522 {0x04E8, 0x04E9, 0x04E8}, {0x04E8, 0x04E9, 0x04E8}, /* 04E8 */
2523 {0x04EA, 0x04EB, 0x04E8}, {0x04EA, 0x04EB, 0x04E8}, /* 04EA */
2524 {0x04EC, 0x04ED, 0x042D}, {0x04EC, 0x04ED, 0x042D}, /* 04EC */
2525 {0x04EE, 0x04EF, 0x0423}, {0x04EE, 0x04EF, 0x0423}, /* 04EE */
2526 {0x04F0, 0x04F1, 0x0423}, {0x04F0, 0x04F1, 0x0423}, /* 04F0 */
2527 {0x04F2, 0x04F3, 0x0423}, {0x04F2, 0x04F3, 0x0423}, /* 04F2 */
2528 {0x04F4, 0x04F5, 0x0427}, {0x04F4, 0x04F5, 0x0427}, /* 04F4 */
2529 {0x04F6, 0x04F7, 0x04F6}, {0x04F6, 0x04F7, 0x04F6}, /* 04F6 */
2530 {0x04F8, 0x04F9, 0x042B}, {0x04F8, 0x04F9, 0x042B}, /* 04F8 */
2531 {0x04FA, 0x04FB, 0x04FA}, {0x04FA, 0x04FB, 0x04FA}, /* 04FA */
2532 {0x04FC, 0x04FD, 0x04FC}, {0x04FC, 0x04FD, 0x04FC}, /* 04FC */
2533 {0x04FE, 0x04FF, 0x04FE}, {0x04FE, 0x04FF, 0x04FE} /* 04FE */
2534 };
2535
2536 static const MY_UNICASE_CHARACTER u520p05[] = {
2537 {0x0500, 0x0501, 0x0500}, {0x0500, 0x0501, 0x0500}, /* 0500 */
2538 {0x0502, 0x0503, 0x0502}, {0x0502, 0x0503, 0x0502}, /* 0502 */
2539 {0x0504, 0x0505, 0x0504}, {0x0504, 0x0505, 0x0504}, /* 0504 */
2540 {0x0506, 0x0507, 0x0506}, {0x0506, 0x0507, 0x0506}, /* 0506 */
2541 {0x0508, 0x0509, 0x0508}, {0x0508, 0x0509, 0x0508}, /* 0508 */
2542 {0x050A, 0x050B, 0x050A}, {0x050A, 0x050B, 0x050A}, /* 050A */
2543 {0x050C, 0x050D, 0x050C}, {0x050C, 0x050D, 0x050C}, /* 050C */
2544 {0x050E, 0x050F, 0x050E}, {0x050E, 0x050F, 0x050E}, /* 050E */
2545 {0x0510, 0x0511, 0x0510}, {0x0510, 0x0511, 0x0510}, /* 0510 */
2546 {0x0512, 0x0513, 0x0512}, {0x0512, 0x0513, 0x0512}, /* 0512 */
2547 {0x0514, 0x0515, 0x0514}, {0x0514, 0x0515, 0x0514}, /* 0514 */
2548 {0x0516, 0x0517, 0x0516}, {0x0516, 0x0517, 0x0516}, /* 0516 */
2549 {0x0518, 0x0519, 0x0518}, {0x0518, 0x0519, 0x0518}, /* 0518 */
2550 {0x051A, 0x051B, 0x051A}, {0x051A, 0x051B, 0x051A}, /* 051A */
2551 {0x051C, 0x051D, 0x051C}, {0x051C, 0x051D, 0x051C}, /* 051C */
2552 {0x051E, 0x051F, 0x051E}, {0x051E, 0x051F, 0x051E}, /* 051E */
2553 {0x0520, 0x0521, 0x0520}, {0x0520, 0x0521, 0x0520}, /* 0520 */
2554 {0x0522, 0x0523, 0x0522}, {0x0522, 0x0523, 0x0522}, /* 0522 */
2555 {0x0524, 0x0525, 0x0524}, {0x0524, 0x0525, 0x0524}, /* 0524 */
2556 {0x0526, 0x0526, 0x0526}, {0x0527, 0x0527, 0x0527}, /* 0526 */
2557 {0x0528, 0x0528, 0x0528}, {0x0529, 0x0529, 0x0529}, /* 0528 */
2558 {0x052A, 0x052A, 0x052A}, {0x052B, 0x052B, 0x052B}, /* 052A */
2559 {0x052C, 0x052C, 0x052C}, {0x052D, 0x052D, 0x052D}, /* 052C */
2560 {0x052E, 0x052E, 0x052E}, {0x052F, 0x052F, 0x052F}, /* 052E */
2561 {0x0530, 0x0530, 0x0530}, {0x0531, 0x0561, 0x0531}, /* 0530 */
2562 {0x0532, 0x0562, 0x0532}, {0x0533, 0x0563, 0x0533}, /* 0532 */
2563 {0x0534, 0x0564, 0x0534}, {0x0535, 0x0565, 0x0535}, /* 0534 */
2564 {0x0536, 0x0566, 0x0536}, {0x0537, 0x0567, 0x0537}, /* 0536 */
2565 {0x0538, 0x0568, 0x0538}, {0x0539, 0x0569, 0x0539}, /* 0538 */
2566 {0x053A, 0x056A, 0x053A}, {0x053B, 0x056B, 0x053B}, /* 053A */
2567 {0x053C, 0x056C, 0x053C}, {0x053D, 0x056D, 0x053D}, /* 053C */
2568 {0x053E, 0x056E, 0x053E}, {0x053F, 0x056F, 0x053F}, /* 053E */
2569 {0x0540, 0x0570, 0x0540}, {0x0541, 0x0571, 0x0541}, /* 0540 */
2570 {0x0542, 0x0572, 0x0542}, {0x0543, 0x0573, 0x0543}, /* 0542 */
2571 {0x0544, 0x0574, 0x0544}, {0x0545, 0x0575, 0x0545}, /* 0544 */
2572 {0x0546, 0x0576, 0x0546}, {0x0547, 0x0577, 0x0547}, /* 0546 */
2573 {0x0548, 0x0578, 0x0548}, {0x0549, 0x0579, 0x0549}, /* 0548 */
2574 {0x054A, 0x057A, 0x054A}, {0x054B, 0x057B, 0x054B}, /* 054A */
2575 {0x054C, 0x057C, 0x054C}, {0x054D, 0x057D, 0x054D}, /* 054C */
2576 {0x054E, 0x057E, 0x054E}, {0x054F, 0x057F, 0x054F}, /* 054E */
2577 {0x0550, 0x0580, 0x0550}, {0x0551, 0x0581, 0x0551}, /* 0550 */
2578 {0x0552, 0x0582, 0x0552}, {0x0553, 0x0583, 0x0553}, /* 0552 */
2579 {0x0554, 0x0584, 0x0554}, {0x0555, 0x0585, 0x0555}, /* 0554 */
2580 {0x0556, 0x0586, 0x0556}, {0x0557, 0x0557, 0x0557}, /* 0556 */
2581 {0x0558, 0x0558, 0x0558}, {0x0559, 0x0559, 0x0559}, /* 0558 */
2582 {0x055A, 0x055A, 0x055A}, {0x055B, 0x055B, 0x055B}, /* 055A */
2583 {0x055C, 0x055C, 0x055C}, {0x055D, 0x055D, 0x055D}, /* 055C */
2584 {0x055E, 0x055E, 0x055E}, {0x055F, 0x055F, 0x055F}, /* 055E */
2585 {0x0560, 0x0560, 0x0560}, {0x0531, 0x0561, 0x0531}, /* 0560 */
2586 {0x0532, 0x0562, 0x0532}, {0x0533, 0x0563, 0x0533}, /* 0562 */
2587 {0x0534, 0x0564, 0x0534}, {0x0535, 0x0565, 0x0535}, /* 0564 */
2588 {0x0536, 0x0566, 0x0536}, {0x0537, 0x0567, 0x0537}, /* 0566 */
2589 {0x0538, 0x0568, 0x0538}, {0x0539, 0x0569, 0x0539}, /* 0568 */
2590 {0x053A, 0x056A, 0x053A}, {0x053B, 0x056B, 0x053B}, /* 056A */
2591 {0x053C, 0x056C, 0x053C}, {0x053D, 0x056D, 0x053D}, /* 056C */
2592 {0x053E, 0x056E, 0x053E}, {0x053F, 0x056F, 0x053F}, /* 056E */
2593 {0x0540, 0x0570, 0x0540}, {0x0541, 0x0571, 0x0541}, /* 0570 */
2594 {0x0542, 0x0572, 0x0542}, {0x0543, 0x0573, 0x0543}, /* 0572 */
2595 {0x0544, 0x0574, 0x0544}, {0x0545, 0x0575, 0x0545}, /* 0574 */
2596 {0x0546, 0x0576, 0x0546}, {0x0547, 0x0577, 0x0547}, /* 0576 */
2597 {0x0548, 0x0578, 0x0548}, {0x0549, 0x0579, 0x0549}, /* 0578 */
2598 {0x054A, 0x057A, 0x054A}, {0x054B, 0x057B, 0x054B}, /* 057A */
2599 {0x054C, 0x057C, 0x054C}, {0x054D, 0x057D, 0x054D}, /* 057C */
2600 {0x054E, 0x057E, 0x054E}, {0x054F, 0x057F, 0x054F}, /* 057E */
2601 {0x0550, 0x0580, 0x0550}, {0x0551, 0x0581, 0x0551}, /* 0580 */
2602 {0x0552, 0x0582, 0x0552}, {0x0553, 0x0583, 0x0553}, /* 0582 */
2603 {0x0554, 0x0584, 0x0554}, {0x0555, 0x0585, 0x0555}, /* 0584 */
2604 {0x0556, 0x0586, 0x0556}, {0x0587, 0x0587, 0x0587}, /* 0586 */
2605 {0x0588, 0x0588, 0x0588}, {0x0589, 0x0589, 0x0589}, /* 0588 */
2606 {0x058A, 0x058A, 0x058A}, {0x058B, 0x058B, 0x058B}, /* 058A */
2607 {0x058C, 0x058C, 0x058C}, {0x058D, 0x058D, 0x058D}, /* 058C */
2608 {0x058E, 0x058E, 0x058E}, {0x058F, 0x058F, 0x058F}, /* 058E */
2609 {0x0590, 0x0590, 0x0590}, {0x0591, 0x0591, 0x0591}, /* 0590 */
2610 {0x0592, 0x0592, 0x0592}, {0x0593, 0x0593, 0x0593}, /* 0592 */
2611 {0x0594, 0x0594, 0x0594}, {0x0595, 0x0595, 0x0595}, /* 0594 */
2612 {0x0596, 0x0596, 0x0596}, {0x0597, 0x0597, 0x0597}, /* 0596 */
2613 {0x0598, 0x0598, 0x0598}, {0x0599, 0x0599, 0x0599}, /* 0598 */
2614 {0x059A, 0x059A, 0x059A}, {0x059B, 0x059B, 0x059B}, /* 059A */
2615 {0x059C, 0x059C, 0x059C}, {0x059D, 0x059D, 0x059D}, /* 059C */
2616 {0x059E, 0x059E, 0x059E}, {0x059F, 0x059F, 0x059F}, /* 059E */
2617 {0x05A0, 0x05A0, 0x05A0}, {0x05A1, 0x05A1, 0x05A1}, /* 05A0 */
2618 {0x05A2, 0x05A2, 0x05A2}, {0x05A3, 0x05A3, 0x05A3}, /* 05A2 */
2619 {0x05A4, 0x05A4, 0x05A4}, {0x05A5, 0x05A5, 0x05A5}, /* 05A4 */
2620 {0x05A6, 0x05A6, 0x05A6}, {0x05A7, 0x05A7, 0x05A7}, /* 05A6 */
2621 {0x05A8, 0x05A8, 0x05A8}, {0x05A9, 0x05A9, 0x05A9}, /* 05A8 */
2622 {0x05AA, 0x05AA, 0x05AA}, {0x05AB, 0x05AB, 0x05AB}, /* 05AA */
2623 {0x05AC, 0x05AC, 0x05AC}, {0x05AD, 0x05AD, 0x05AD}, /* 05AC */
2624 {0x05AE, 0x05AE, 0x05AE}, {0x05AF, 0x05AF, 0x05AF}, /* 05AE */
2625 {0x05B0, 0x05B0, 0x05B0}, {0x05B1, 0x05B1, 0x05B1}, /* 05B0 */
2626 {0x05B2, 0x05B2, 0x05B2}, {0x05B3, 0x05B3, 0x05B3}, /* 05B2 */
2627 {0x05B4, 0x05B4, 0x05B4}, {0x05B5, 0x05B5, 0x05B5}, /* 05B4 */
2628 {0x05B6, 0x05B6, 0x05B6}, {0x05B7, 0x05B7, 0x05B7}, /* 05B6 */
2629 {0x05B8, 0x05B8, 0x05B8}, {0x05B9, 0x05B9, 0x05B9}, /* 05B8 */
2630 {0x05BA, 0x05BA, 0x05BA}, {0x05BB, 0x05BB, 0x05BB}, /* 05BA */
2631 {0x05BC, 0x05BC, 0x05BC}, {0x05BD, 0x05BD, 0x05BD}, /* 05BC */
2632 {0x05BE, 0x05BE, 0x05BE}, {0x05BF, 0x05BF, 0x05BF}, /* 05BE */
2633 {0x05C0, 0x05C0, 0x05C0}, {0x05C1, 0x05C1, 0x05C1}, /* 05C0 */
2634 {0x05C2, 0x05C2, 0x05C2}, {0x05C3, 0x05C3, 0x05C3}, /* 05C2 */
2635 {0x05C4, 0x05C4, 0x05C4}, {0x05C5, 0x05C5, 0x05C5}, /* 05C4 */
2636 {0x05C6, 0x05C6, 0x05C6}, {0x05C7, 0x05C7, 0x05C7}, /* 05C6 */
2637 {0x05C8, 0x05C8, 0x05C8}, {0x05C9, 0x05C9, 0x05C9}, /* 05C8 */
2638 {0x05CA, 0x05CA, 0x05CA}, {0x05CB, 0x05CB, 0x05CB}, /* 05CA */
2639 {0x05CC, 0x05CC, 0x05CC}, {0x05CD, 0x05CD, 0x05CD}, /* 05CC */
2640 {0x05CE, 0x05CE, 0x05CE}, {0x05CF, 0x05CF, 0x05CF}, /* 05CE */
2641 {0x05D0, 0x05D0, 0x05D0}, {0x05D1, 0x05D1, 0x05D1}, /* 05D0 */
2642 {0x05D2, 0x05D2, 0x05D2}, {0x05D3, 0x05D3, 0x05D3}, /* 05D2 */
2643 {0x05D4, 0x05D4, 0x05D4}, {0x05D5, 0x05D5, 0x05D5}, /* 05D4 */
2644 {0x05D6, 0x05D6, 0x05D6}, {0x05D7, 0x05D7, 0x05D7}, /* 05D6 */
2645 {0x05D8, 0x05D8, 0x05D8}, {0x05D9, 0x05D9, 0x05D9}, /* 05D8 */
2646 {0x05DA, 0x05DA, 0x05DA}, {0x05DB, 0x05DB, 0x05DB}, /* 05DA */
2647 {0x05DC, 0x05DC, 0x05DC}, {0x05DD, 0x05DD, 0x05DD}, /* 05DC */
2648 {0x05DE, 0x05DE, 0x05DE}, {0x05DF, 0x05DF, 0x05DF}, /* 05DE */
2649 {0x05E0, 0x05E0, 0x05E0}, {0x05E1, 0x05E1, 0x05E1}, /* 05E0 */
2650 {0x05E2, 0x05E2, 0x05E2}, {0x05E3, 0x05E3, 0x05E3}, /* 05E2 */
2651 {0x05E4, 0x05E4, 0x05E4}, {0x05E5, 0x05E5, 0x05E5}, /* 05E4 */
2652 {0x05E6, 0x05E6, 0x05E6}, {0x05E7, 0x05E7, 0x05E7}, /* 05E6 */
2653 {0x05E8, 0x05E8, 0x05E8}, {0x05E9, 0x05E9, 0x05E9}, /* 05E8 */
2654 {0x05EA, 0x05EA, 0x05EA}, {0x05EB, 0x05EB, 0x05EB}, /* 05EA */
2655 {0x05EC, 0x05EC, 0x05EC}, {0x05ED, 0x05ED, 0x05ED}, /* 05EC */
2656 {0x05EE, 0x05EE, 0x05EE}, {0x05EF, 0x05EF, 0x05EF}, /* 05EE */
2657 {0x05F0, 0x05F0, 0x05F0}, {0x05F1, 0x05F1, 0x05F1}, /* 05F0 */
2658 {0x05F2, 0x05F2, 0x05F2}, {0x05F3, 0x05F3, 0x05F3}, /* 05F2 */
2659 {0x05F4, 0x05F4, 0x05F4}, {0x05F5, 0x05F5, 0x05F5}, /* 05F4 */
2660 {0x05F6, 0x05F6, 0x05F6}, {0x05F7, 0x05F7, 0x05F7}, /* 05F6 */
2661 {0x05F8, 0x05F8, 0x05F8}, {0x05F9, 0x05F9, 0x05F9}, /* 05F8 */
2662 {0x05FA, 0x05FA, 0x05FA}, {0x05FB, 0x05FB, 0x05FB}, /* 05FA */
2663 {0x05FC, 0x05FC, 0x05FC}, {0x05FD, 0x05FD, 0x05FD}, /* 05FC */
2664 {0x05FE, 0x05FE, 0x05FE}, {0x05FF, 0x05FF, 0x05FF} /* 05FE */
2665 };
2666
2667 static const MY_UNICASE_CHARACTER u520p10[] = {
2668 {0x1000, 0x1000, 0x1000}, {0x1001, 0x1001, 0x1001}, /* 1000 */
2669 {0x1002, 0x1002, 0x1002}, {0x1003, 0x1003, 0x1003}, /* 1002 */
2670 {0x1004, 0x1004, 0x1004}, {0x1005, 0x1005, 0x1005}, /* 1004 */
2671 {0x1006, 0x1006, 0x1006}, {0x1007, 0x1007, 0x1007}, /* 1006 */
2672 {0x1008, 0x1008, 0x1008}, {0x1009, 0x1009, 0x1009}, /* 1008 */
2673 {0x100A, 0x100A, 0x100A}, {0x100B, 0x100B, 0x100B}, /* 100A */
2674 {0x100C, 0x100C, 0x100C}, {0x100D, 0x100D, 0x100D}, /* 100C */
2675 {0x100E, 0x100E, 0x100E}, {0x100F, 0x100F, 0x100F}, /* 100E */
2676 {0x1010, 0x1010, 0x1010}, {0x1011, 0x1011, 0x1011}, /* 1010 */
2677 {0x1012, 0x1012, 0x1012}, {0x1013, 0x1013, 0x1013}, /* 1012 */
2678 {0x1014, 0x1014, 0x1014}, {0x1015, 0x1015, 0x1015}, /* 1014 */
2679 {0x1016, 0x1016, 0x1016}, {0x1017, 0x1017, 0x1017}, /* 1016 */
2680 {0x1018, 0x1018, 0x1018}, {0x1019, 0x1019, 0x1019}, /* 1018 */
2681 {0x101A, 0x101A, 0x101A}, {0x101B, 0x101B, 0x101B}, /* 101A */
2682 {0x101C, 0x101C, 0x101C}, {0x101D, 0x101D, 0x101D}, /* 101C */
2683 {0x101E, 0x101E, 0x101E}, {0x101F, 0x101F, 0x101F}, /* 101E */
2684 {0x1020, 0x1020, 0x1020}, {0x1021, 0x1021, 0x1021}, /* 1020 */
2685 {0x1022, 0x1022, 0x1022}, {0x1023, 0x1023, 0x1023}, /* 1022 */
2686 {0x1024, 0x1024, 0x1024}, {0x1025, 0x1025, 0x1025}, /* 1024 */
2687 {0x1026, 0x1026, 0x1026}, {0x1027, 0x1027, 0x1027}, /* 1026 */
2688 {0x1028, 0x1028, 0x1028}, {0x1029, 0x1029, 0x1029}, /* 1028 */
2689 {0x102A, 0x102A, 0x102A}, {0x102B, 0x102B, 0x102B}, /* 102A */
2690 {0x102C, 0x102C, 0x102C}, {0x102D, 0x102D, 0x102D}, /* 102C */
2691 {0x102E, 0x102E, 0x102E}, {0x102F, 0x102F, 0x102F}, /* 102E */
2692 {0x1030, 0x1030, 0x1030}, {0x1031, 0x1031, 0x1031}, /* 1030 */
2693 {0x1032, 0x1032, 0x1032}, {0x1033, 0x1033, 0x1033}, /* 1032 */
2694 {0x1034, 0x1034, 0x1034}, {0x1035, 0x1035, 0x1035}, /* 1034 */
2695 {0x1036, 0x1036, 0x1036}, {0x1037, 0x1037, 0x1037}, /* 1036 */
2696 {0x1038, 0x1038, 0x1038}, {0x1039, 0x1039, 0x1039}, /* 1038 */
2697 {0x103A, 0x103A, 0x103A}, {0x103B, 0x103B, 0x103B}, /* 103A */
2698 {0x103C, 0x103C, 0x103C}, {0x103D, 0x103D, 0x103D}, /* 103C */
2699 {0x103E, 0x103E, 0x103E}, {0x103F, 0x103F, 0x103F}, /* 103E */
2700 {0x1040, 0x1040, 0x1040}, {0x1041, 0x1041, 0x1041}, /* 1040 */
2701 {0x1042, 0x1042, 0x1042}, {0x1043, 0x1043, 0x1043}, /* 1042 */
2702 {0x1044, 0x1044, 0x1044}, {0x1045, 0x1045, 0x1045}, /* 1044 */
2703 {0x1046, 0x1046, 0x1046}, {0x1047, 0x1047, 0x1047}, /* 1046 */
2704 {0x1048, 0x1048, 0x1048}, {0x1049, 0x1049, 0x1049}, /* 1048 */
2705 {0x104A, 0x104A, 0x104A}, {0x104B, 0x104B, 0x104B}, /* 104A */
2706 {0x104C, 0x104C, 0x104C}, {0x104D, 0x104D, 0x104D}, /* 104C */
2707 {0x104E, 0x104E, 0x104E}, {0x104F, 0x104F, 0x104F}, /* 104E */
2708 {0x1050, 0x1050, 0x1050}, {0x1051, 0x1051, 0x1051}, /* 1050 */
2709 {0x1052, 0x1052, 0x1052}, {0x1053, 0x1053, 0x1053}, /* 1052 */
2710 {0x1054, 0x1054, 0x1054}, {0x1055, 0x1055, 0x1055}, /* 1054 */
2711 {0x1056, 0x1056, 0x1056}, {0x1057, 0x1057, 0x1057}, /* 1056 */
2712 {0x1058, 0x1058, 0x1058}, {0x1059, 0x1059, 0x1059}, /* 1058 */
2713 {0x105A, 0x105A, 0x105A}, {0x105B, 0x105B, 0x105B}, /* 105A */
2714 {0x105C, 0x105C, 0x105C}, {0x105D, 0x105D, 0x105D}, /* 105C */
2715 {0x105E, 0x105E, 0x105E}, {0x105F, 0x105F, 0x105F}, /* 105E */
2716 {0x1060, 0x1060, 0x1060}, {0x1061, 0x1061, 0x1061}, /* 1060 */
2717 {0x1062, 0x1062, 0x1062}, {0x1063, 0x1063, 0x1063}, /* 1062 */
2718 {0x1064, 0x1064, 0x1064}, {0x1065, 0x1065, 0x1065}, /* 1064 */
2719 {0x1066, 0x1066, 0x1066}, {0x1067, 0x1067, 0x1067}, /* 1066 */
2720 {0x1068, 0x1068, 0x1068}, {0x1069, 0x1069, 0x1069}, /* 1068 */
2721 {0x106A, 0x106A, 0x106A}, {0x106B, 0x106B, 0x106B}, /* 106A */
2722 {0x106C, 0x106C, 0x106C}, {0x106D, 0x106D, 0x106D}, /* 106C */
2723 {0x106E, 0x106E, 0x106E}, {0x106F, 0x106F, 0x106F}, /* 106E */
2724 {0x1070, 0x1070, 0x1070}, {0x1071, 0x1071, 0x1071}, /* 1070 */
2725 {0x1072, 0x1072, 0x1072}, {0x1073, 0x1073, 0x1073}, /* 1072 */
2726 {0x1074, 0x1074, 0x1074}, {0x1075, 0x1075, 0x1075}, /* 1074 */
2727 {0x1076, 0x1076, 0x1076}, {0x1077, 0x1077, 0x1077}, /* 1076 */
2728 {0x1078, 0x1078, 0x1078}, {0x1079, 0x1079, 0x1079}, /* 1078 */
2729 {0x107A, 0x107A, 0x107A}, {0x107B, 0x107B, 0x107B}, /* 107A */
2730 {0x107C, 0x107C, 0x107C}, {0x107D, 0x107D, 0x107D}, /* 107C */
2731 {0x107E, 0x107E, 0x107E}, {0x107F, 0x107F, 0x107F}, /* 107E */
2732 {0x1080, 0x1080, 0x1080}, {0x1081, 0x1081, 0x1081}, /* 1080 */
2733 {0x1082, 0x1082, 0x1082}, {0x1083, 0x1083, 0x1083}, /* 1082 */
2734 {0x1084, 0x1084, 0x1084}, {0x1085, 0x1085, 0x1085}, /* 1084 */
2735 {0x1086, 0x1086, 0x1086}, {0x1087, 0x1087, 0x1087}, /* 1086 */
2736 {0x1088, 0x1088, 0x1088}, {0x1089, 0x1089, 0x1089}, /* 1088 */
2737 {0x108A, 0x108A, 0x108A}, {0x108B, 0x108B, 0x108B}, /* 108A */
2738 {0x108C, 0x108C, 0x108C}, {0x108D, 0x108D, 0x108D}, /* 108C */
2739 {0x108E, 0x108E, 0x108E}, {0x108F, 0x108F, 0x108F}, /* 108E */
2740 {0x1090, 0x1090, 0x1090}, {0x1091, 0x1091, 0x1091}, /* 1090 */
2741 {0x1092, 0x1092, 0x1092}, {0x1093, 0x1093, 0x1093}, /* 1092 */
2742 {0x1094, 0x1094, 0x1094}, {0x1095, 0x1095, 0x1095}, /* 1094 */
2743 {0x1096, 0x1096, 0x1096}, {0x1097, 0x1097, 0x1097}, /* 1096 */
2744 {0x1098, 0x1098, 0x1098}, {0x1099, 0x1099, 0x1099}, /* 1098 */
2745 {0x109A, 0x109A, 0x109A}, {0x109B, 0x109B, 0x109B}, /* 109A */
2746 {0x109C, 0x109C, 0x109C}, {0x109D, 0x109D, 0x109D}, /* 109C */
2747 {0x109E, 0x109E, 0x109E}, {0x109F, 0x109F, 0x109F}, /* 109E */
2748 {0x10A0, 0x2D00, 0x10A0}, {0x10A1, 0x2D01, 0x10A1}, /* 10A0 */
2749 {0x10A2, 0x2D02, 0x10A2}, {0x10A3, 0x2D03, 0x10A3}, /* 10A2 */
2750 {0x10A4, 0x2D04, 0x10A4}, {0x10A5, 0x2D05, 0x10A5}, /* 10A4 */
2751 {0x10A6, 0x2D06, 0x10A6}, {0x10A7, 0x2D07, 0x10A7}, /* 10A6 */
2752 {0x10A8, 0x2D08, 0x10A8}, {0x10A9, 0x2D09, 0x10A9}, /* 10A8 */
2753 {0x10AA, 0x2D0A, 0x10AA}, {0x10AB, 0x2D0B, 0x10AB}, /* 10AA */
2754 {0x10AC, 0x2D0C, 0x10AC}, {0x10AD, 0x2D0D, 0x10AD}, /* 10AC */
2755 {0x10AE, 0x2D0E, 0x10AE}, {0x10AF, 0x2D0F, 0x10AF}, /* 10AE */
2756 {0x10B0, 0x2D10, 0x10B0}, {0x10B1, 0x2D11, 0x10B1}, /* 10B0 */
2757 {0x10B2, 0x2D12, 0x10B2}, {0x10B3, 0x2D13, 0x10B3}, /* 10B2 */
2758 {0x10B4, 0x2D14, 0x10B4}, {0x10B5, 0x2D15, 0x10B5}, /* 10B4 */
2759 {0x10B6, 0x2D16, 0x10B6}, {0x10B7, 0x2D17, 0x10B7}, /* 10B6 */
2760 {0x10B8, 0x2D18, 0x10B8}, {0x10B9, 0x2D19, 0x10B9}, /* 10B8 */
2761 {0x10BA, 0x2D1A, 0x10BA}, {0x10BB, 0x2D1B, 0x10BB}, /* 10BA */
2762 {0x10BC, 0x2D1C, 0x10BC}, {0x10BD, 0x2D1D, 0x10BD}, /* 10BC */
2763 {0x10BE, 0x2D1E, 0x10BE}, {0x10BF, 0x2D1F, 0x10BF}, /* 10BE */
2764 {0x10C0, 0x2D20, 0x10C0}, {0x10C1, 0x2D21, 0x10C1}, /* 10C0 */
2765 {0x10C2, 0x2D22, 0x10C2}, {0x10C3, 0x2D23, 0x10C3}, /* 10C2 */
2766 {0x10C4, 0x2D24, 0x10C4}, {0x10C5, 0x2D25, 0x10C5}, /* 10C4 */
2767 {0x10C6, 0x10C6, 0x10C6}, {0x10C7, 0x10C7, 0x10C7}, /* 10C6 */
2768 {0x10C8, 0x10C8, 0x10C8}, {0x10C9, 0x10C9, 0x10C9}, /* 10C8 */
2769 {0x10CA, 0x10CA, 0x10CA}, {0x10CB, 0x10CB, 0x10CB}, /* 10CA */
2770 {0x10CC, 0x10CC, 0x10CC}, {0x10CD, 0x10CD, 0x10CD}, /* 10CC */
2771 {0x10CE, 0x10CE, 0x10CE}, {0x10CF, 0x10CF, 0x10CF}, /* 10CE */
2772 {0x10D0, 0x10D0, 0x10D0}, {0x10D1, 0x10D1, 0x10D1}, /* 10D0 */
2773 {0x10D2, 0x10D2, 0x10D2}, {0x10D3, 0x10D3, 0x10D3}, /* 10D2 */
2774 {0x10D4, 0x10D4, 0x10D4}, {0x10D5, 0x10D5, 0x10D5}, /* 10D4 */
2775 {0x10D6, 0x10D6, 0x10D6}, {0x10D7, 0x10D7, 0x10D7}, /* 10D6 */
2776 {0x10D8, 0x10D8, 0x10D8}, {0x10D9, 0x10D9, 0x10D9}, /* 10D8 */
2777 {0x10DA, 0x10DA, 0x10DA}, {0x10DB, 0x10DB, 0x10DB}, /* 10DA */
2778 {0x10DC, 0x10DC, 0x10DC}, {0x10DD, 0x10DD, 0x10DD}, /* 10DC */
2779 {0x10DE, 0x10DE, 0x10DE}, {0x10DF, 0x10DF, 0x10DF}, /* 10DE */
2780 {0x10E0, 0x10E0, 0x10E0}, {0x10E1, 0x10E1, 0x10E1}, /* 10E0 */
2781 {0x10E2, 0x10E2, 0x10E2}, {0x10E3, 0x10E3, 0x10E3}, /* 10E2 */
2782 {0x10E4, 0x10E4, 0x10E4}, {0x10E5, 0x10E5, 0x10E5}, /* 10E4 */
2783 {0x10E6, 0x10E6, 0x10E6}, {0x10E7, 0x10E7, 0x10E7}, /* 10E6 */
2784 {0x10E8, 0x10E8, 0x10E8}, {0x10E9, 0x10E9, 0x10E9}, /* 10E8 */
2785 {0x10EA, 0x10EA, 0x10EA}, {0x10EB, 0x10EB, 0x10EB}, /* 10EA */
2786 {0x10EC, 0x10EC, 0x10EC}, {0x10ED, 0x10ED, 0x10ED}, /* 10EC */
2787 {0x10EE, 0x10EE, 0x10EE}, {0x10EF, 0x10EF, 0x10EF}, /* 10EE */
2788 {0x10F0, 0x10F0, 0x10F0}, {0x10F1, 0x10F1, 0x10F1}, /* 10F0 */
2789 {0x10F2, 0x10F2, 0x10F2}, {0x10F3, 0x10F3, 0x10F3}, /* 10F2 */
2790 {0x10F4, 0x10F4, 0x10F4}, {0x10F5, 0x10F5, 0x10F5}, /* 10F4 */
2791 {0x10F6, 0x10F6, 0x10F6}, {0x10F7, 0x10F7, 0x10F7}, /* 10F6 */
2792 {0x10F8, 0x10F8, 0x10F8}, {0x10F9, 0x10F9, 0x10F9}, /* 10F8 */
2793 {0x10FA, 0x10FA, 0x10FA}, {0x10FB, 0x10FB, 0x10FB}, /* 10FA */
2794 {0x10FC, 0x10FC, 0x10FC}, {0x10FD, 0x10FD, 0x10FD}, /* 10FC */
2795 {0x10FE, 0x10FE, 0x10FE}, {0x10FF, 0x10FF, 0x10FF} /* 10FE */
2796 };
2797
2798 static const MY_UNICASE_CHARACTER u520p1D[] = {
2799 {0x1D00, 0x1D00, 0x1D00}, {0x1D01, 0x1D01, 0x1D01}, /* 1D00 */
2800 {0x1D02, 0x1D02, 0x1D02}, {0x1D03, 0x1D03, 0x1D03}, /* 1D02 */
2801 {0x1D04, 0x1D04, 0x1D04}, {0x1D05, 0x1D05, 0x1D05}, /* 1D04 */
2802 {0x1D06, 0x1D06, 0x1D06}, {0x1D07, 0x1D07, 0x1D07}, /* 1D06 */
2803 {0x1D08, 0x1D08, 0x1D08}, {0x1D09, 0x1D09, 0x1D09}, /* 1D08 */
2804 {0x1D0A, 0x1D0A, 0x1D0A}, {0x1D0B, 0x1D0B, 0x1D0B}, /* 1D0A */
2805 {0x1D0C, 0x1D0C, 0x1D0C}, {0x1D0D, 0x1D0D, 0x1D0D}, /* 1D0C */
2806 {0x1D0E, 0x1D0E, 0x1D0E}, {0x1D0F, 0x1D0F, 0x1D0F}, /* 1D0E */
2807 {0x1D10, 0x1D10, 0x1D10}, {0x1D11, 0x1D11, 0x1D11}, /* 1D10 */
2808 {0x1D12, 0x1D12, 0x1D12}, {0x1D13, 0x1D13, 0x1D13}, /* 1D12 */
2809 {0x1D14, 0x1D14, 0x1D14}, {0x1D15, 0x1D15, 0x1D15}, /* 1D14 */
2810 {0x1D16, 0x1D16, 0x1D16}, {0x1D17, 0x1D17, 0x1D17}, /* 1D16 */
2811 {0x1D18, 0x1D18, 0x1D18}, {0x1D19, 0x1D19, 0x1D19}, /* 1D18 */
2812 {0x1D1A, 0x1D1A, 0x1D1A}, {0x1D1B, 0x1D1B, 0x1D1B}, /* 1D1A */
2813 {0x1D1C, 0x1D1C, 0x1D1C}, {0x1D1D, 0x1D1D, 0x1D1D}, /* 1D1C */
2814 {0x1D1E, 0x1D1E, 0x1D1E}, {0x1D1F, 0x1D1F, 0x1D1F}, /* 1D1E */
2815 {0x1D20, 0x1D20, 0x1D20}, {0x1D21, 0x1D21, 0x1D21}, /* 1D20 */
2816 {0x1D22, 0x1D22, 0x1D22}, {0x1D23, 0x1D23, 0x1D23}, /* 1D22 */
2817 {0x1D24, 0x1D24, 0x1D24}, {0x1D25, 0x1D25, 0x1D25}, /* 1D24 */
2818 {0x1D26, 0x1D26, 0x1D26}, {0x1D27, 0x1D27, 0x1D27}, /* 1D26 */
2819 {0x1D28, 0x1D28, 0x1D28}, {0x1D29, 0x1D29, 0x1D29}, /* 1D28 */
2820 {0x1D2A, 0x1D2A, 0x1D2A}, {0x1D2B, 0x1D2B, 0x1D2B}, /* 1D2A */
2821 {0x1D2C, 0x1D2C, 0x1D2C}, {0x1D2D, 0x1D2D, 0x1D2D}, /* 1D2C */
2822 {0x1D2E, 0x1D2E, 0x1D2E}, {0x1D2F, 0x1D2F, 0x1D2F}, /* 1D2E */
2823 {0x1D30, 0x1D30, 0x1D30}, {0x1D31, 0x1D31, 0x1D31}, /* 1D30 */
2824 {0x1D32, 0x1D32, 0x1D32}, {0x1D33, 0x1D33, 0x1D33}, /* 1D32 */
2825 {0x1D34, 0x1D34, 0x1D34}, {0x1D35, 0x1D35, 0x1D35}, /* 1D34 */
2826 {0x1D36, 0x1D36, 0x1D36}, {0x1D37, 0x1D37, 0x1D37}, /* 1D36 */
2827 {0x1D38, 0x1D38, 0x1D38}, {0x1D39, 0x1D39, 0x1D39}, /* 1D38 */
2828 {0x1D3A, 0x1D3A, 0x1D3A}, {0x1D3B, 0x1D3B, 0x1D3B}, /* 1D3A */
2829 {0x1D3C, 0x1D3C, 0x1D3C}, {0x1D3D, 0x1D3D, 0x1D3D}, /* 1D3C */
2830 {0x1D3E, 0x1D3E, 0x1D3E}, {0x1D3F, 0x1D3F, 0x1D3F}, /* 1D3E */
2831 {0x1D40, 0x1D40, 0x1D40}, {0x1D41, 0x1D41, 0x1D41}, /* 1D40 */
2832 {0x1D42, 0x1D42, 0x1D42}, {0x1D43, 0x1D43, 0x1D43}, /* 1D42 */
2833 {0x1D44, 0x1D44, 0x1D44}, {0x1D45, 0x1D45, 0x1D45}, /* 1D44 */
2834 {0x1D46, 0x1D46, 0x1D46}, {0x1D47, 0x1D47, 0x1D47}, /* 1D46 */
2835 {0x1D48, 0x1D48, 0x1D48}, {0x1D49, 0x1D49, 0x1D49}, /* 1D48 */
2836 {0x1D4A, 0x1D4A, 0x1D4A}, {0x1D4B, 0x1D4B, 0x1D4B}, /* 1D4A */
2837 {0x1D4C, 0x1D4C, 0x1D4C}, {0x1D4D, 0x1D4D, 0x1D4D}, /* 1D4C */
2838 {0x1D4E, 0x1D4E, 0x1D4E}, {0x1D4F, 0x1D4F, 0x1D4F}, /* 1D4E */
2839 {0x1D50, 0x1D50, 0x1D50}, {0x1D51, 0x1D51, 0x1D51}, /* 1D50 */
2840 {0x1D52, 0x1D52, 0x1D52}, {0x1D53, 0x1D53, 0x1D53}, /* 1D52 */
2841 {0x1D54, 0x1D54, 0x1D54}, {0x1D55, 0x1D55, 0x1D55}, /* 1D54 */
2842 {0x1D56, 0x1D56, 0x1D56}, {0x1D57, 0x1D57, 0x1D57}, /* 1D56 */
2843 {0x1D58, 0x1D58, 0x1D58}, {0x1D59, 0x1D59, 0x1D59}, /* 1D58 */
2844 {0x1D5A, 0x1D5A, 0x1D5A}, {0x1D5B, 0x1D5B, 0x1D5B}, /* 1D5A */
2845 {0x1D5C, 0x1D5C, 0x1D5C}, {0x1D5D, 0x1D5D, 0x1D5D}, /* 1D5C */
2846 {0x1D5E, 0x1D5E, 0x1D5E}, {0x1D5F, 0x1D5F, 0x1D5F}, /* 1D5E */
2847 {0x1D60, 0x1D60, 0x1D60}, {0x1D61, 0x1D61, 0x1D61}, /* 1D60 */
2848 {0x1D62, 0x1D62, 0x1D62}, {0x1D63, 0x1D63, 0x1D63}, /* 1D62 */
2849 {0x1D64, 0x1D64, 0x1D64}, {0x1D65, 0x1D65, 0x1D65}, /* 1D64 */
2850 {0x1D66, 0x1D66, 0x1D66}, {0x1D67, 0x1D67, 0x1D67}, /* 1D66 */
2851 {0x1D68, 0x1D68, 0x1D68}, {0x1D69, 0x1D69, 0x1D69}, /* 1D68 */
2852 {0x1D6A, 0x1D6A, 0x1D6A}, {0x1D6B, 0x1D6B, 0x1D6B}, /* 1D6A */
2853 {0x1D6C, 0x1D6C, 0x1D6C}, {0x1D6D, 0x1D6D, 0x1D6D}, /* 1D6C */
2854 {0x1D6E, 0x1D6E, 0x1D6E}, {0x1D6F, 0x1D6F, 0x1D6F}, /* 1D6E */
2855 {0x1D70, 0x1D70, 0x1D70}, {0x1D71, 0x1D71, 0x1D71}, /* 1D70 */
2856 {0x1D72, 0x1D72, 0x1D72}, {0x1D73, 0x1D73, 0x1D73}, /* 1D72 */
2857 {0x1D74, 0x1D74, 0x1D74}, {0x1D75, 0x1D75, 0x1D75}, /* 1D74 */
2858 {0x1D76, 0x1D76, 0x1D76}, {0x1D77, 0x1D77, 0x1D77}, /* 1D76 */
2859 {0x1D78, 0x1D78, 0x1D78}, {0xA77D, 0x1D79, 0xA77D}, /* 1D78 */
2860 {0x1D7A, 0x1D7A, 0x1D7A}, {0x1D7B, 0x1D7B, 0x1D7B}, /* 1D7A */
2861 {0x1D7C, 0x1D7C, 0x1D7C}, {0x2C63, 0x1D7D, 0x2C63}, /* 1D7C */
2862 {0x1D7E, 0x1D7E, 0x1D7E}, {0x1D7F, 0x1D7F, 0x1D7F}, /* 1D7E */
2863 {0x1D80, 0x1D80, 0x1D80}, {0x1D81, 0x1D81, 0x1D81}, /* 1D80 */
2864 {0x1D82, 0x1D82, 0x1D82}, {0x1D83, 0x1D83, 0x1D83}, /* 1D82 */
2865 {0x1D84, 0x1D84, 0x1D84}, {0x1D85, 0x1D85, 0x1D85}, /* 1D84 */
2866 {0x1D86, 0x1D86, 0x1D86}, {0x1D87, 0x1D87, 0x1D87}, /* 1D86 */
2867 {0x1D88, 0x1D88, 0x1D88}, {0x1D89, 0x1D89, 0x1D89}, /* 1D88 */
2868 {0x1D8A, 0x1D8A, 0x1D8A}, {0x1D8B, 0x1D8B, 0x1D8B}, /* 1D8A */
2869 {0x1D8C, 0x1D8C, 0x1D8C}, {0x1D8D, 0x1D8D, 0x1D8D}, /* 1D8C */
2870 {0x1D8E, 0x1D8E, 0x1D8E}, {0x1D8F, 0x1D8F, 0x1D8F}, /* 1D8E */
2871 {0x1D90, 0x1D90, 0x1D90}, {0x1D91, 0x1D91, 0x1D91}, /* 1D90 */
2872 {0x1D92, 0x1D92, 0x1D92}, {0x1D93, 0x1D93, 0x1D93}, /* 1D92 */
2873 {0x1D94, 0x1D94, 0x1D94}, {0x1D95, 0x1D95, 0x1D95}, /* 1D94 */
2874 {0x1D96, 0x1D96, 0x1D96}, {0x1D97, 0x1D97, 0x1D97}, /* 1D96 */
2875 {0x1D98, 0x1D98, 0x1D98}, {0x1D99, 0x1D99, 0x1D99}, /* 1D98 */
2876 {0x1D9A, 0x1D9A, 0x1D9A}, {0x1D9B, 0x1D9B, 0x1D9B}, /* 1D9A */
2877 {0x1D9C, 0x1D9C, 0x1D9C}, {0x1D9D, 0x1D9D, 0x1D9D}, /* 1D9C */
2878 {0x1D9E, 0x1D9E, 0x1D9E}, {0x1D9F, 0x1D9F, 0x1D9F}, /* 1D9E */
2879 {0x1DA0, 0x1DA0, 0x1DA0}, {0x1DA1, 0x1DA1, 0x1DA1}, /* 1DA0 */
2880 {0x1DA2, 0x1DA2, 0x1DA2}, {0x1DA3, 0x1DA3, 0x1DA3}, /* 1DA2 */
2881 {0x1DA4, 0x1DA4, 0x1DA4}, {0x1DA5, 0x1DA5, 0x1DA5}, /* 1DA4 */
2882 {0x1DA6, 0x1DA6, 0x1DA6}, {0x1DA7, 0x1DA7, 0x1DA7}, /* 1DA6 */
2883 {0x1DA8, 0x1DA8, 0x1DA8}, {0x1DA9, 0x1DA9, 0x1DA9}, /* 1DA8 */
2884 {0x1DAA, 0x1DAA, 0x1DAA}, {0x1DAB, 0x1DAB, 0x1DAB}, /* 1DAA */
2885 {0x1DAC, 0x1DAC, 0x1DAC}, {0x1DAD, 0x1DAD, 0x1DAD}, /* 1DAC */
2886 {0x1DAE, 0x1DAE, 0x1DAE}, {0x1DAF, 0x1DAF, 0x1DAF}, /* 1DAE */
2887 {0x1DB0, 0x1DB0, 0x1DB0}, {0x1DB1, 0x1DB1, 0x1DB1}, /* 1DB0 */
2888 {0x1DB2, 0x1DB2, 0x1DB2}, {0x1DB3, 0x1DB3, 0x1DB3}, /* 1DB2 */
2889 {0x1DB4, 0x1DB4, 0x1DB4}, {0x1DB5, 0x1DB5, 0x1DB5}, /* 1DB4 */
2890 {0x1DB6, 0x1DB6, 0x1DB6}, {0x1DB7, 0x1DB7, 0x1DB7}, /* 1DB6 */
2891 {0x1DB8, 0x1DB8, 0x1DB8}, {0x1DB9, 0x1DB9, 0x1DB9}, /* 1DB8 */
2892 {0x1DBA, 0x1DBA, 0x1DBA}, {0x1DBB, 0x1DBB, 0x1DBB}, /* 1DBA */
2893 {0x1DBC, 0x1DBC, 0x1DBC}, {0x1DBD, 0x1DBD, 0x1DBD}, /* 1DBC */
2894 {0x1DBE, 0x1DBE, 0x1DBE}, {0x1DBF, 0x1DBF, 0x1DBF}, /* 1DBE */
2895 {0x1DC0, 0x1DC0, 0x1DC0}, {0x1DC1, 0x1DC1, 0x1DC1}, /* 1DC0 */
2896 {0x1DC2, 0x1DC2, 0x1DC2}, {0x1DC3, 0x1DC3, 0x1DC3}, /* 1DC2 */
2897 {0x1DC4, 0x1DC4, 0x1DC4}, {0x1DC5, 0x1DC5, 0x1DC5}, /* 1DC4 */
2898 {0x1DC6, 0x1DC6, 0x1DC6}, {0x1DC7, 0x1DC7, 0x1DC7}, /* 1DC6 */
2899 {0x1DC8, 0x1DC8, 0x1DC8}, {0x1DC9, 0x1DC9, 0x1DC9}, /* 1DC8 */
2900 {0x1DCA, 0x1DCA, 0x1DCA}, {0x1DCB, 0x1DCB, 0x1DCB}, /* 1DCA */
2901 {0x1DCC, 0x1DCC, 0x1DCC}, {0x1DCD, 0x1DCD, 0x1DCD}, /* 1DCC */
2902 {0x1DCE, 0x1DCE, 0x1DCE}, {0x1DCF, 0x1DCF, 0x1DCF}, /* 1DCE */
2903 {0x1DD0, 0x1DD0, 0x1DD0}, {0x1DD1, 0x1DD1, 0x1DD1}, /* 1DD0 */
2904 {0x1DD2, 0x1DD2, 0x1DD2}, {0x1DD3, 0x1DD3, 0x1DD3}, /* 1DD2 */
2905 {0x1DD4, 0x1DD4, 0x1DD4}, {0x1DD5, 0x1DD5, 0x1DD5}, /* 1DD4 */
2906 {0x1DD6, 0x1DD6, 0x1DD6}, {0x1DD7, 0x1DD7, 0x1DD7}, /* 1DD6 */
2907 {0x1DD8, 0x1DD8, 0x1DD8}, {0x1DD9, 0x1DD9, 0x1DD9}, /* 1DD8 */
2908 {0x1DDA, 0x1DDA, 0x1DDA}, {0x1DDB, 0x1DDB, 0x1DDB}, /* 1DDA */
2909 {0x1DDC, 0x1DDC, 0x1DDC}, {0x1DDD, 0x1DDD, 0x1DDD}, /* 1DDC */
2910 {0x1DDE, 0x1DDE, 0x1DDE}, {0x1DDF, 0x1DDF, 0x1DDF}, /* 1DDE */
2911 {0x1DE0, 0x1DE0, 0x1DE0}, {0x1DE1, 0x1DE1, 0x1DE1}, /* 1DE0 */
2912 {0x1DE2, 0x1DE2, 0x1DE2}, {0x1DE3, 0x1DE3, 0x1DE3}, /* 1DE2 */
2913 {0x1DE4, 0x1DE4, 0x1DE4}, {0x1DE5, 0x1DE5, 0x1DE5}, /* 1DE4 */
2914 {0x1DE6, 0x1DE6, 0x1DE6}, {0x1DE7, 0x1DE7, 0x1DE7}, /* 1DE6 */
2915 {0x1DE8, 0x1DE8, 0x1DE8}, {0x1DE9, 0x1DE9, 0x1DE9}, /* 1DE8 */
2916 {0x1DEA, 0x1DEA, 0x1DEA}, {0x1DEB, 0x1DEB, 0x1DEB}, /* 1DEA */
2917 {0x1DEC, 0x1DEC, 0x1DEC}, {0x1DED, 0x1DED, 0x1DED}, /* 1DEC */
2918 {0x1DEE, 0x1DEE, 0x1DEE}, {0x1DEF, 0x1DEF, 0x1DEF}, /* 1DEE */
2919 {0x1DF0, 0x1DF0, 0x1DF0}, {0x1DF1, 0x1DF1, 0x1DF1}, /* 1DF0 */
2920 {0x1DF2, 0x1DF2, 0x1DF2}, {0x1DF3, 0x1DF3, 0x1DF3}, /* 1DF2 */
2921 {0x1DF4, 0x1DF4, 0x1DF4}, {0x1DF5, 0x1DF5, 0x1DF5}, /* 1DF4 */
2922 {0x1DF6, 0x1DF6, 0x1DF6}, {0x1DF7, 0x1DF7, 0x1DF7}, /* 1DF6 */
2923 {0x1DF8, 0x1DF8, 0x1DF8}, {0x1DF9, 0x1DF9, 0x1DF9}, /* 1DF8 */
2924 {0x1DFA, 0x1DFA, 0x1DFA}, {0x1DFB, 0x1DFB, 0x1DFB}, /* 1DFA */
2925 {0x1DFC, 0x1DFC, 0x1DFC}, {0x1DFD, 0x1DFD, 0x1DFD}, /* 1DFC */
2926 {0x1DFE, 0x1DFE, 0x1DFE}, {0x1DFF, 0x1DFF, 0x1DFF} /* 1DFE */
2927 };
2928
2929 static const MY_UNICASE_CHARACTER u520p1E[] = {
2930 {0x1E00, 0x1E01, 0x0041}, {0x1E00, 0x1E01, 0x0041}, /* 1E00 */
2931 {0x1E02, 0x1E03, 0x0042}, {0x1E02, 0x1E03, 0x0042}, /* 1E02 */
2932 {0x1E04, 0x1E05, 0x0042}, {0x1E04, 0x1E05, 0x0042}, /* 1E04 */
2933 {0x1E06, 0x1E07, 0x0042}, {0x1E06, 0x1E07, 0x0042}, /* 1E06 */
2934 {0x1E08, 0x1E09, 0x0043}, {0x1E08, 0x1E09, 0x0043}, /* 1E08 */
2935 {0x1E0A, 0x1E0B, 0x0044}, {0x1E0A, 0x1E0B, 0x0044}, /* 1E0A */
2936 {0x1E0C, 0x1E0D, 0x0044}, {0x1E0C, 0x1E0D, 0x0044}, /* 1E0C */
2937 {0x1E0E, 0x1E0F, 0x0044}, {0x1E0E, 0x1E0F, 0x0044}, /* 1E0E */
2938 {0x1E10, 0x1E11, 0x0044}, {0x1E10, 0x1E11, 0x0044}, /* 1E10 */
2939 {0x1E12, 0x1E13, 0x0044}, {0x1E12, 0x1E13, 0x0044}, /* 1E12 */
2940 {0x1E14, 0x1E15, 0x0045}, {0x1E14, 0x1E15, 0x0045}, /* 1E14 */
2941 {0x1E16, 0x1E17, 0x0045}, {0x1E16, 0x1E17, 0x0045}, /* 1E16 */
2942 {0x1E18, 0x1E19, 0x0045}, {0x1E18, 0x1E19, 0x0045}, /* 1E18 */
2943 {0x1E1A, 0x1E1B, 0x0045}, {0x1E1A, 0x1E1B, 0x0045}, /* 1E1A */
2944 {0x1E1C, 0x1E1D, 0x0045}, {0x1E1C, 0x1E1D, 0x0045}, /* 1E1C */
2945 {0x1E1E, 0x1E1F, 0x0046}, {0x1E1E, 0x1E1F, 0x0046}, /* 1E1E */
2946 {0x1E20, 0x1E21, 0x0047}, {0x1E20, 0x1E21, 0x0047}, /* 1E20 */
2947 {0x1E22, 0x1E23, 0x0048}, {0x1E22, 0x1E23, 0x0048}, /* 1E22 */
2948 {0x1E24, 0x1E25, 0x0048}, {0x1E24, 0x1E25, 0x0048}, /* 1E24 */
2949 {0x1E26, 0x1E27, 0x0048}, {0x1E26, 0x1E27, 0x0048}, /* 1E26 */
2950 {0x1E28, 0x1E29, 0x0048}, {0x1E28, 0x1E29, 0x0048}, /* 1E28 */
2951 {0x1E2A, 0x1E2B, 0x0048}, {0x1E2A, 0x1E2B, 0x0048}, /* 1E2A */
2952 {0x1E2C, 0x1E2D, 0x0049}, {0x1E2C, 0x1E2D, 0x0049}, /* 1E2C */
2953 {0x1E2E, 0x1E2F, 0x0049}, {0x1E2E, 0x1E2F, 0x0049}, /* 1E2E */
2954 {0x1E30, 0x1E31, 0x004B}, {0x1E30, 0x1E31, 0x004B}, /* 1E30 */
2955 {0x1E32, 0x1E33, 0x004B}, {0x1E32, 0x1E33, 0x004B}, /* 1E32 */
2956 {0x1E34, 0x1E35, 0x004B}, {0x1E34, 0x1E35, 0x004B}, /* 1E34 */
2957 {0x1E36, 0x1E37, 0x004C}, {0x1E36, 0x1E37, 0x004C}, /* 1E36 */
2958 {0x1E38, 0x1E39, 0x004C}, {0x1E38, 0x1E39, 0x004C}, /* 1E38 */
2959 {0x1E3A, 0x1E3B, 0x004C}, {0x1E3A, 0x1E3B, 0x004C}, /* 1E3A */
2960 {0x1E3C, 0x1E3D, 0x004C}, {0x1E3C, 0x1E3D, 0x004C}, /* 1E3C */
2961 {0x1E3E, 0x1E3F, 0x004D}, {0x1E3E, 0x1E3F, 0x004D}, /* 1E3E */
2962 {0x1E40, 0x1E41, 0x004D}, {0x1E40, 0x1E41, 0x004D}, /* 1E40 */
2963 {0x1E42, 0x1E43, 0x004D}, {0x1E42, 0x1E43, 0x004D}, /* 1E42 */
2964 {0x1E44, 0x1E45, 0x004E}, {0x1E44, 0x1E45, 0x004E}, /* 1E44 */
2965 {0x1E46, 0x1E47, 0x004E}, {0x1E46, 0x1E47, 0x004E}, /* 1E46 */
2966 {0x1E48, 0x1E49, 0x004E}, {0x1E48, 0x1E49, 0x004E}, /* 1E48 */
2967 {0x1E4A, 0x1E4B, 0x004E}, {0x1E4A, 0x1E4B, 0x004E}, /* 1E4A */
2968 {0x1E4C, 0x1E4D, 0x004F}, {0x1E4C, 0x1E4D, 0x004F}, /* 1E4C */
2969 {0x1E4E, 0x1E4F, 0x004F}, {0x1E4E, 0x1E4F, 0x004F}, /* 1E4E */
2970 {0x1E50, 0x1E51, 0x004F}, {0x1E50, 0x1E51, 0x004F}, /* 1E50 */
2971 {0x1E52, 0x1E53, 0x004F}, {0x1E52, 0x1E53, 0x004F}, /* 1E52 */
2972 {0x1E54, 0x1E55, 0x0050}, {0x1E54, 0x1E55, 0x0050}, /* 1E54 */
2973 {0x1E56, 0x1E57, 0x0050}, {0x1E56, 0x1E57, 0x0050}, /* 1E56 */
2974 {0x1E58, 0x1E59, 0x0052}, {0x1E58, 0x1E59, 0x0052}, /* 1E58 */
2975 {0x1E5A, 0x1E5B, 0x0052}, {0x1E5A, 0x1E5B, 0x0052}, /* 1E5A */
2976 {0x1E5C, 0x1E5D, 0x0052}, {0x1E5C, 0x1E5D, 0x0052}, /* 1E5C */
2977 {0x1E5E, 0x1E5F, 0x0052}, {0x1E5E, 0x1E5F, 0x0052}, /* 1E5E */
2978 {0x1E60, 0x1E61, 0x0053}, {0x1E60, 0x1E61, 0x0053}, /* 1E60 */
2979 {0x1E62, 0x1E63, 0x0053}, {0x1E62, 0x1E63, 0x0053}, /* 1E62 */
2980 {0x1E64, 0x1E65, 0x0053}, {0x1E64, 0x1E65, 0x0053}, /* 1E64 */
2981 {0x1E66, 0x1E67, 0x0053}, {0x1E66, 0x1E67, 0x0053}, /* 1E66 */
2982 {0x1E68, 0x1E69, 0x0053}, {0x1E68, 0x1E69, 0x0053}, /* 1E68 */
2983 {0x1E6A, 0x1E6B, 0x0054}, {0x1E6A, 0x1E6B, 0x0054}, /* 1E6A */
2984 {0x1E6C, 0x1E6D, 0x0054}, {0x1E6C, 0x1E6D, 0x0054}, /* 1E6C */
2985 {0x1E6E, 0x1E6F, 0x0054}, {0x1E6E, 0x1E6F, 0x0054}, /* 1E6E */
2986 {0x1E70, 0x1E71, 0x0054}, {0x1E70, 0x1E71, 0x0054}, /* 1E70 */
2987 {0x1E72, 0x1E73, 0x0055}, {0x1E72, 0x1E73, 0x0055}, /* 1E72 */
2988 {0x1E74, 0x1E75, 0x0055}, {0x1E74, 0x1E75, 0x0055}, /* 1E74 */
2989 {0x1E76, 0x1E77, 0x0055}, {0x1E76, 0x1E77, 0x0055}, /* 1E76 */
2990 {0x1E78, 0x1E79, 0x0055}, {0x1E78, 0x1E79, 0x0055}, /* 1E78 */
2991 {0x1E7A, 0x1E7B, 0x0055}, {0x1E7A, 0x1E7B, 0x0055}, /* 1E7A */
2992 {0x1E7C, 0x1E7D, 0x0056}, {0x1E7C, 0x1E7D, 0x0056}, /* 1E7C */
2993 {0x1E7E, 0x1E7F, 0x0056}, {0x1E7E, 0x1E7F, 0x0056}, /* 1E7E */
2994 {0x1E80, 0x1E81, 0x0057}, {0x1E80, 0x1E81, 0x0057}, /* 1E80 */
2995 {0x1E82, 0x1E83, 0x0057}, {0x1E82, 0x1E83, 0x0057}, /* 1E82 */
2996 {0x1E84, 0x1E85, 0x0057}, {0x1E84, 0x1E85, 0x0057}, /* 1E84 */
2997 {0x1E86, 0x1E87, 0x0057}, {0x1E86, 0x1E87, 0x0057}, /* 1E86 */
2998 {0x1E88, 0x1E89, 0x0057}, {0x1E88, 0x1E89, 0x0057}, /* 1E88 */
2999 {0x1E8A, 0x1E8B, 0x0058}, {0x1E8A, 0x1E8B, 0x0058}, /* 1E8A */
3000 {0x1E8C, 0x1E8D, 0x0058}, {0x1E8C, 0x1E8D, 0x0058}, /* 1E8C */
3001 {0x1E8E, 0x1E8F, 0x0059}, {0x1E8E, 0x1E8F, 0x0059}, /* 1E8E */
3002 {0x1E90, 0x1E91, 0x005A}, {0x1E90, 0x1E91, 0x005A}, /* 1E90 */
3003 {0x1E92, 0x1E93, 0x005A}, {0x1E92, 0x1E93, 0x005A}, /* 1E92 */
3004 {0x1E94, 0x1E95, 0x005A}, {0x1E94, 0x1E95, 0x005A}, /* 1E94 */
3005 {0x1E96, 0x1E96, 0x0048}, {0x1E97, 0x1E97, 0x0054}, /* 1E96 */
3006 {0x1E98, 0x1E98, 0x0057}, {0x1E99, 0x1E99, 0x0059}, /* 1E98 */
3007 {0x1E9A, 0x1E9A, 0x1E9A}, {0x1E60, 0x1E9B, 0x0053}, /* 1E9A */
3008 {0x1E9C, 0x1E9C, 0x1E9C}, {0x1E9D, 0x1E9D, 0x1E9D}, /* 1E9C */
3009 {0x1E9E, 0x00DF, 0x1E9E}, {0x1E9F, 0x1E9F, 0x1E9F}, /* 1E9E */
3010 {0x1EA0, 0x1EA1, 0x0041}, {0x1EA0, 0x1EA1, 0x0041}, /* 1EA0 */
3011 {0x1EA2, 0x1EA3, 0x0041}, {0x1EA2, 0x1EA3, 0x0041}, /* 1EA2 */
3012 {0x1EA4, 0x1EA5, 0x0041}, {0x1EA4, 0x1EA5, 0x0041}, /* 1EA4 */
3013 {0x1EA6, 0x1EA7, 0x0041}, {0x1EA6, 0x1EA7, 0x0041}, /* 1EA6 */
3014 {0x1EA8, 0x1EA9, 0x0041}, {0x1EA8, 0x1EA9, 0x0041}, /* 1EA8 */
3015 {0x1EAA, 0x1EAB, 0x0041}, {0x1EAA, 0x1EAB, 0x0041}, /* 1EAA */
3016 {0x1EAC, 0x1EAD, 0x0041}, {0x1EAC, 0x1EAD, 0x0041}, /* 1EAC */
3017 {0x1EAE, 0x1EAF, 0x0041}, {0x1EAE, 0x1EAF, 0x0041}, /* 1EAE */
3018 {0x1EB0, 0x1EB1, 0x0041}, {0x1EB0, 0x1EB1, 0x0041}, /* 1EB0 */
3019 {0x1EB2, 0x1EB3, 0x0041}, {0x1EB2, 0x1EB3, 0x0041}, /* 1EB2 */
3020 {0x1EB4, 0x1EB5, 0x0041}, {0x1EB4, 0x1EB5, 0x0041}, /* 1EB4 */
3021 {0x1EB6, 0x1EB7, 0x0041}, {0x1EB6, 0x1EB7, 0x0041}, /* 1EB6 */
3022 {0x1EB8, 0x1EB9, 0x0045}, {0x1EB8, 0x1EB9, 0x0045}, /* 1EB8 */
3023 {0x1EBA, 0x1EBB, 0x0045}, {0x1EBA, 0x1EBB, 0x0045}, /* 1EBA */
3024 {0x1EBC, 0x1EBD, 0x0045}, {0x1EBC, 0x1EBD, 0x0045}, /* 1EBC */
3025 {0x1EBE, 0x1EBF, 0x0045}, {0x1EBE, 0x1EBF, 0x0045}, /* 1EBE */
3026 {0x1EC0, 0x1EC1, 0x0045}, {0x1EC0, 0x1EC1, 0x0045}, /* 1EC0 */
3027 {0x1EC2, 0x1EC3, 0x0045}, {0x1EC2, 0x1EC3, 0x0045}, /* 1EC2 */
3028 {0x1EC4, 0x1EC5, 0x0045}, {0x1EC4, 0x1EC5, 0x0045}, /* 1EC4 */
3029 {0x1EC6, 0x1EC7, 0x0045}, {0x1EC6, 0x1EC7, 0x0045}, /* 1EC6 */
3030 {0x1EC8, 0x1EC9, 0x0049}, {0x1EC8, 0x1EC9, 0x0049}, /* 1EC8 */
3031 {0x1ECA, 0x1ECB, 0x0049}, {0x1ECA, 0x1ECB, 0x0049}, /* 1ECA */
3032 {0x1ECC, 0x1ECD, 0x004F}, {0x1ECC, 0x1ECD, 0x004F}, /* 1ECC */
3033 {0x1ECE, 0x1ECF, 0x004F}, {0x1ECE, 0x1ECF, 0x004F}, /* 1ECE */
3034 {0x1ED0, 0x1ED1, 0x004F}, {0x1ED0, 0x1ED1, 0x004F}, /* 1ED0 */
3035 {0x1ED2, 0x1ED3, 0x004F}, {0x1ED2, 0x1ED3, 0x004F}, /* 1ED2 */
3036 {0x1ED4, 0x1ED5, 0x004F}, {0x1ED4, 0x1ED5, 0x004F}, /* 1ED4 */
3037 {0x1ED6, 0x1ED7, 0x004F}, {0x1ED6, 0x1ED7, 0x004F}, /* 1ED6 */
3038 {0x1ED8, 0x1ED9, 0x004F}, {0x1ED8, 0x1ED9, 0x004F}, /* 1ED8 */
3039 {0x1EDA, 0x1EDB, 0x004F}, {0x1EDA, 0x1EDB, 0x004F}, /* 1EDA */
3040 {0x1EDC, 0x1EDD, 0x004F}, {0x1EDC, 0x1EDD, 0x004F}, /* 1EDC */
3041 {0x1EDE, 0x1EDF, 0x004F}, {0x1EDE, 0x1EDF, 0x004F}, /* 1EDE */
3042 {0x1EE0, 0x1EE1, 0x004F}, {0x1EE0, 0x1EE1, 0x004F}, /* 1EE0 */
3043 {0x1EE2, 0x1EE3, 0x004F}, {0x1EE2, 0x1EE3, 0x004F}, /* 1EE2 */
3044 {0x1EE4, 0x1EE5, 0x0055}, {0x1EE4, 0x1EE5, 0x0055}, /* 1EE4 */
3045 {0x1EE6, 0x1EE7, 0x0055}, {0x1EE6, 0x1EE7, 0x0055}, /* 1EE6 */
3046 {0x1EE8, 0x1EE9, 0x0055}, {0x1EE8, 0x1EE9, 0x0055}, /* 1EE8 */
3047 {0x1EEA, 0x1EEB, 0x0055}, {0x1EEA, 0x1EEB, 0x0055}, /* 1EEA */
3048 {0x1EEC, 0x1EED, 0x0055}, {0x1EEC, 0x1EED, 0x0055}, /* 1EEC */
3049 {0x1EEE, 0x1EEF, 0x0055}, {0x1EEE, 0x1EEF, 0x0055}, /* 1EEE */
3050 {0x1EF0, 0x1EF1, 0x0055}, {0x1EF0, 0x1EF1, 0x0055}, /* 1EF0 */
3051 {0x1EF2, 0x1EF3, 0x0059}, {0x1EF2, 0x1EF3, 0x0059}, /* 1EF2 */
3052 {0x1EF4, 0x1EF5, 0x0059}, {0x1EF4, 0x1EF5, 0x0059}, /* 1EF4 */
3053 {0x1EF6, 0x1EF7, 0x0059}, {0x1EF6, 0x1EF7, 0x0059}, /* 1EF6 */
3054 {0x1EF8, 0x1EF9, 0x0059}, {0x1EF8, 0x1EF9, 0x0059}, /* 1EF8 */
3055 {0x1EFA, 0x1EFB, 0x1EFA}, {0x1EFA, 0x1EFB, 0x1EFA}, /* 1EFA */
3056 {0x1EFC, 0x1EFD, 0x1EFC}, {0x1EFC, 0x1EFD, 0x1EFC}, /* 1EFC */
3057 {0x1EFE, 0x1EFF, 0x1EFE}, {0x1EFE, 0x1EFF, 0x1EFE} /* 1EFE */
3058 };
3059
3060 static const MY_UNICASE_CHARACTER u520p1F[] = {
3061 {0x1F08, 0x1F00, 0x0391}, {0x1F09, 0x1F01, 0x0391}, /* 1F00 */
3062 {0x1F0A, 0x1F02, 0x0391}, {0x1F0B, 0x1F03, 0x0391}, /* 1F02 */
3063 {0x1F0C, 0x1F04, 0x0391}, {0x1F0D, 0x1F05, 0x0391}, /* 1F04 */
3064 {0x1F0E, 0x1F06, 0x0391}, {0x1F0F, 0x1F07, 0x0391}, /* 1F06 */
3065 {0x1F08, 0x1F00, 0x0391}, {0x1F09, 0x1F01, 0x0391}, /* 1F08 */
3066 {0x1F0A, 0x1F02, 0x0391}, {0x1F0B, 0x1F03, 0x0391}, /* 1F0A */
3067 {0x1F0C, 0x1F04, 0x0391}, {0x1F0D, 0x1F05, 0x0391}, /* 1F0C */
3068 {0x1F0E, 0x1F06, 0x0391}, {0x1F0F, 0x1F07, 0x0391}, /* 1F0E */
3069 {0x1F18, 0x1F10, 0x0395}, {0x1F19, 0x1F11, 0x0395}, /* 1F10 */
3070 {0x1F1A, 0x1F12, 0x0395}, {0x1F1B, 0x1F13, 0x0395}, /* 1F12 */
3071 {0x1F1C, 0x1F14, 0x0395}, {0x1F1D, 0x1F15, 0x0395}, /* 1F14 */
3072 {0x1F16, 0x1F16, 0x1F16}, {0x1F17, 0x1F17, 0x1F17}, /* 1F16 */
3073 {0x1F18, 0x1F10, 0x0395}, {0x1F19, 0x1F11, 0x0395}, /* 1F18 */
3074 {0x1F1A, 0x1F12, 0x0395}, {0x1F1B, 0x1F13, 0x0395}, /* 1F1A */
3075 {0x1F1C, 0x1F14, 0x0395}, {0x1F1D, 0x1F15, 0x0395}, /* 1F1C */
3076 {0x1F1E, 0x1F1E, 0x1F1E}, {0x1F1F, 0x1F1F, 0x1F1F}, /* 1F1E */
3077 {0x1F28, 0x1F20, 0x0397}, {0x1F29, 0x1F21, 0x0397}, /* 1F20 */
3078 {0x1F2A, 0x1F22, 0x0397}, {0x1F2B, 0x1F23, 0x0397}, /* 1F22 */
3079 {0x1F2C, 0x1F24, 0x0397}, {0x1F2D, 0x1F25, 0x0397}, /* 1F24 */
3080 {0x1F2E, 0x1F26, 0x0397}, {0x1F2F, 0x1F27, 0x0397}, /* 1F26 */
3081 {0x1F28, 0x1F20, 0x0397}, {0x1F29, 0x1F21, 0x0397}, /* 1F28 */
3082 {0x1F2A, 0x1F22, 0x0397}, {0x1F2B, 0x1F23, 0x0397}, /* 1F2A */
3083 {0x1F2C, 0x1F24, 0x0397}, {0x1F2D, 0x1F25, 0x0397}, /* 1F2C */
3084 {0x1F2E, 0x1F26, 0x0397}, {0x1F2F, 0x1F27, 0x0397}, /* 1F2E */
3085 {0x1F38, 0x1F30, 0x0399}, {0x1F39, 0x1F31, 0x0399}, /* 1F30 */
3086 {0x1F3A, 0x1F32, 0x0399}, {0x1F3B, 0x1F33, 0x0399}, /* 1F32 */
3087 {0x1F3C, 0x1F34, 0x0399}, {0x1F3D, 0x1F35, 0x0399}, /* 1F34 */
3088 {0x1F3E, 0x1F36, 0x0399}, {0x1F3F, 0x1F37, 0x0399}, /* 1F36 */
3089 {0x1F38, 0x1F30, 0x0399}, {0x1F39, 0x1F31, 0x0399}, /* 1F38 */
3090 {0x1F3A, 0x1F32, 0x0399}, {0x1F3B, 0x1F33, 0x0399}, /* 1F3A */
3091 {0x1F3C, 0x1F34, 0x0399}, {0x1F3D, 0x1F35, 0x0399}, /* 1F3C */
3092 {0x1F3E, 0x1F36, 0x0399}, {0x1F3F, 0x1F37, 0x0399}, /* 1F3E */
3093 {0x1F48, 0x1F40, 0x039F}, {0x1F49, 0x1F41, 0x039F}, /* 1F40 */
3094 {0x1F4A, 0x1F42, 0x039F}, {0x1F4B, 0x1F43, 0x039F}, /* 1F42 */
3095 {0x1F4C, 0x1F44, 0x039F}, {0x1F4D, 0x1F45, 0x039F}, /* 1F44 */
3096 {0x1F46, 0x1F46, 0x1F46}, {0x1F47, 0x1F47, 0x1F47}, /* 1F46 */
3097 {0x1F48, 0x1F40, 0x039F}, {0x1F49, 0x1F41, 0x039F}, /* 1F48 */
3098 {0x1F4A, 0x1F42, 0x039F}, {0x1F4B, 0x1F43, 0x039F}, /* 1F4A */
3099 {0x1F4C, 0x1F44, 0x039F}, {0x1F4D, 0x1F45, 0x039F}, /* 1F4C */
3100 {0x1F4E, 0x1F4E, 0x1F4E}, {0x1F4F, 0x1F4F, 0x1F4F}, /* 1F4E */
3101 {0x1F50, 0x1F50, 0x03A5}, {0x1F59, 0x1F51, 0x03A5}, /* 1F50 */
3102 {0x1F52, 0x1F52, 0x03A5}, {0x1F5B, 0x1F53, 0x03A5}, /* 1F52 */
3103 {0x1F54, 0x1F54, 0x03A5}, {0x1F5D, 0x1F55, 0x03A5}, /* 1F54 */
3104 {0x1F56, 0x1F56, 0x03A5}, {0x1F5F, 0x1F57, 0x03A5}, /* 1F56 */
3105 {0x1F58, 0x1F58, 0x1F58}, {0x1F59, 0x1F51, 0x03A5}, /* 1F58 */
3106 {0x1F5A, 0x1F5A, 0x1F5A}, {0x1F5B, 0x1F53, 0x03A5}, /* 1F5A */
3107 {0x1F5C, 0x1F5C, 0x1F5C}, {0x1F5D, 0x1F55, 0x03A5}, /* 1F5C */
3108 {0x1F5E, 0x1F5E, 0x1F5E}, {0x1F5F, 0x1F57, 0x03A5}, /* 1F5E */
3109 {0x1F68, 0x1F60, 0x03A9}, {0x1F69, 0x1F61, 0x03A9}, /* 1F60 */
3110 {0x1F6A, 0x1F62, 0x03A9}, {0x1F6B, 0x1F63, 0x03A9}, /* 1F62 */
3111 {0x1F6C, 0x1F64, 0x03A9}, {0x1F6D, 0x1F65, 0x03A9}, /* 1F64 */
3112 {0x1F6E, 0x1F66, 0x03A9}, {0x1F6F, 0x1F67, 0x03A9}, /* 1F66 */
3113 {0x1F68, 0x1F60, 0x03A9}, {0x1F69, 0x1F61, 0x03A9}, /* 1F68 */
3114 {0x1F6A, 0x1F62, 0x03A9}, {0x1F6B, 0x1F63, 0x03A9}, /* 1F6A */
3115 {0x1F6C, 0x1F64, 0x03A9}, {0x1F6D, 0x1F65, 0x03A9}, /* 1F6C */
3116 {0x1F6E, 0x1F66, 0x03A9}, {0x1F6F, 0x1F67, 0x03A9}, /* 1F6E */
3117 {0x1FBA, 0x1F70, 0x0391}, {0x1FBB, 0x1F71, 0x1FBB}, /* 1F70 */
3118 {0x1FC8, 0x1F72, 0x0395}, {0x1FC9, 0x1F73, 0x1FC9}, /* 1F72 */
3119 {0x1FCA, 0x1F74, 0x0397}, {0x1FCB, 0x1F75, 0x1FCB}, /* 1F74 */
3120 {0x1FDA, 0x1F76, 0x0399}, {0x1FDB, 0x1F77, 0x1FDB}, /* 1F76 */
3121 {0x1FF8, 0x1F78, 0x039F}, {0x1FF9, 0x1F79, 0x1FF9}, /* 1F78 */
3122 {0x1FEA, 0x1F7A, 0x03A5}, {0x1FEB, 0x1F7B, 0x1FEB}, /* 1F7A */
3123 {0x1FFA, 0x1F7C, 0x03A9}, {0x1FFB, 0x1F7D, 0x1FFB}, /* 1F7C */
3124 {0x1F7E, 0x1F7E, 0x1F7E}, {0x1F7F, 0x1F7F, 0x1F7F}, /* 1F7E */
3125 {0x1F88, 0x1F80, 0x0391}, {0x1F89, 0x1F81, 0x0391}, /* 1F80 */
3126 {0x1F8A, 0x1F82, 0x0391}, {0x1F8B, 0x1F83, 0x0391}, /* 1F82 */
3127 {0x1F8C, 0x1F84, 0x0391}, {0x1F8D, 0x1F85, 0x0391}, /* 1F84 */
3128 {0x1F8E, 0x1F86, 0x0391}, {0x1F8F, 0x1F87, 0x0391}, /* 1F86 */
3129 {0x1F88, 0x1F80, 0x0391}, {0x1F89, 0x1F81, 0x0391}, /* 1F88 */
3130 {0x1F8A, 0x1F82, 0x0391}, {0x1F8B, 0x1F83, 0x0391}, /* 1F8A */
3131 {0x1F8C, 0x1F84, 0x0391}, {0x1F8D, 0x1F85, 0x0391}, /* 1F8C */
3132 {0x1F8E, 0x1F86, 0x0391}, {0x1F8F, 0x1F87, 0x0391}, /* 1F8E */
3133 {0x1F98, 0x1F90, 0x0397}, {0x1F99, 0x1F91, 0x0397}, /* 1F90 */
3134 {0x1F9A, 0x1F92, 0x0397}, {0x1F9B, 0x1F93, 0x0397}, /* 1F92 */
3135 {0x1F9C, 0x1F94, 0x0397}, {0x1F9D, 0x1F95, 0x0397}, /* 1F94 */
3136 {0x1F9E, 0x1F96, 0x0397}, {0x1F9F, 0x1F97, 0x0397}, /* 1F96 */
3137 {0x1F98, 0x1F90, 0x0397}, {0x1F99, 0x1F91, 0x0397}, /* 1F98 */
3138 {0x1F9A, 0x1F92, 0x0397}, {0x1F9B, 0x1F93, 0x0397}, /* 1F9A */
3139 {0x1F9C, 0x1F94, 0x0397}, {0x1F9D, 0x1F95, 0x0397}, /* 1F9C */
3140 {0x1F9E, 0x1F96, 0x0397}, {0x1F9F, 0x1F97, 0x0397}, /* 1F9E */
3141 {0x1FA8, 0x1FA0, 0x03A9}, {0x1FA9, 0x1FA1, 0x03A9}, /* 1FA0 */
3142 {0x1FAA, 0x1FA2, 0x03A9}, {0x1FAB, 0x1FA3, 0x03A9}, /* 1FA2 */
3143 {0x1FAC, 0x1FA4, 0x03A9}, {0x1FAD, 0x1FA5, 0x03A9}, /* 1FA4 */
3144 {0x1FAE, 0x1FA6, 0x03A9}, {0x1FAF, 0x1FA7, 0x03A9}, /* 1FA6 */
3145 {0x1FA8, 0x1FA0, 0x03A9}, {0x1FA9, 0x1FA1, 0x03A9}, /* 1FA8 */
3146 {0x1FAA, 0x1FA2, 0x03A9}, {0x1FAB, 0x1FA3, 0x03A9}, /* 1FAA */
3147 {0x1FAC, 0x1FA4, 0x03A9}, {0x1FAD, 0x1FA5, 0x03A9}, /* 1FAC */
3148 {0x1FAE, 0x1FA6, 0x03A9}, {0x1FAF, 0x1FA7, 0x03A9}, /* 1FAE */
3149 {0x1FB8, 0x1FB0, 0x0391}, {0x1FB9, 0x1FB1, 0x0391}, /* 1FB0 */
3150 {0x1FB2, 0x1FB2, 0x0391}, {0x1FBC, 0x1FB3, 0x0391}, /* 1FB2 */
3151 {0x1FB4, 0x1FB4, 0x0391}, {0x1FB5, 0x1FB5, 0x1FB5}, /* 1FB4 */
3152 {0x1FB6, 0x1FB6, 0x0391}, {0x1FB7, 0x1FB7, 0x0391}, /* 1FB6 */
3153 {0x1FB8, 0x1FB0, 0x0391}, {0x1FB9, 0x1FB1, 0x0391}, /* 1FB8 */
3154 {0x1FBA, 0x1F70, 0x0391}, {0x1FBB, 0x1F71, 0x1FBB}, /* 1FBA */
3155 {0x1FBC, 0x1FB3, 0x0391}, {0x1FBD, 0x1FBD, 0x1FBD}, /* 1FBC */
3156 {0x0399, 0x1FBE, 0x0399}, {0x1FBF, 0x1FBF, 0x1FBF}, /* 1FBE */
3157 {0x1FC0, 0x1FC0, 0x1FC0}, {0x1FC1, 0x1FC1, 0x1FC1}, /* 1FC0 */
3158 {0x1FC2, 0x1FC2, 0x0397}, {0x1FCC, 0x1FC3, 0x0397}, /* 1FC2 */
3159 {0x1FC4, 0x1FC4, 0x0397}, {0x1FC5, 0x1FC5, 0x1FC5}, /* 1FC4 */
3160 {0x1FC6, 0x1FC6, 0x0397}, {0x1FC7, 0x1FC7, 0x0397}, /* 1FC6 */
3161 {0x1FC8, 0x1F72, 0x0395}, {0x1FC9, 0x1F73, 0x1FC9}, /* 1FC8 */
3162 {0x1FCA, 0x1F74, 0x0397}, {0x1FCB, 0x1F75, 0x1FCB}, /* 1FCA */
3163 {0x1FCC, 0x1FC3, 0x0397}, {0x1FCD, 0x1FCD, 0x1FCD}, /* 1FCC */
3164 {0x1FCE, 0x1FCE, 0x1FCE}, {0x1FCF, 0x1FCF, 0x1FCF}, /* 1FCE */
3165 {0x1FD8, 0x1FD0, 0x0399}, {0x1FD9, 0x1FD1, 0x0399}, /* 1FD0 */
3166 {0x1FD2, 0x1FD2, 0x0399}, {0x1FD3, 0x1FD3, 0x1FD3}, /* 1FD2 */
3167 {0x1FD4, 0x1FD4, 0x1FD4}, {0x1FD5, 0x1FD5, 0x1FD5}, /* 1FD4 */
3168 {0x1FD6, 0x1FD6, 0x0399}, {0x1FD7, 0x1FD7, 0x0399}, /* 1FD6 */
3169 {0x1FD8, 0x1FD0, 0x0399}, {0x1FD9, 0x1FD1, 0x0399}, /* 1FD8 */
3170 {0x1FDA, 0x1F76, 0x0399}, {0x1FDB, 0x1F77, 0x1FDB}, /* 1FDA */
3171 {0x1FDC, 0x1FDC, 0x1FDC}, {0x1FDD, 0x1FDD, 0x1FDD}, /* 1FDC */
3172 {0x1FDE, 0x1FDE, 0x1FDE}, {0x1FDF, 0x1FDF, 0x1FDF}, /* 1FDE */
3173 {0x1FE8, 0x1FE0, 0x03A5}, {0x1FE9, 0x1FE1, 0x03A5}, /* 1FE0 */
3174 {0x1FE2, 0x1FE2, 0x03A5}, {0x1FE3, 0x1FE3, 0x1FE3}, /* 1FE2 */
3175 {0x1FE4, 0x1FE4, 0x03A1}, {0x1FEC, 0x1FE5, 0x03A1}, /* 1FE4 */
3176 {0x1FE6, 0x1FE6, 0x03A5}, {0x1FE7, 0x1FE7, 0x03A5}, /* 1FE6 */
3177 {0x1FE8, 0x1FE0, 0x03A5}, {0x1FE9, 0x1FE1, 0x03A5}, /* 1FE8 */
3178 {0x1FEA, 0x1F7A, 0x03A5}, {0x1FEB, 0x1F7B, 0x1FEB}, /* 1FEA */
3179 {0x1FEC, 0x1FE5, 0x03A1}, {0x1FED, 0x1FED, 0x1FED}, /* 1FEC */
3180 {0x1FEE, 0x1FEE, 0x1FEE}, {0x1FEF, 0x1FEF, 0x1FEF}, /* 1FEE */
3181 {0x1FF0, 0x1FF0, 0x1FF0}, {0x1FF1, 0x1FF1, 0x1FF1}, /* 1FF0 */
3182 {0x1FF2, 0x1FF2, 0x03A9}, {0x1FFC, 0x1FF3, 0x03A9}, /* 1FF2 */
3183 {0x1FF4, 0x1FF4, 0x03A9}, {0x1FF5, 0x1FF5, 0x1FF5}, /* 1FF4 */
3184 {0x1FF6, 0x1FF6, 0x03A9}, {0x1FF7, 0x1FF7, 0x03A9}, /* 1FF6 */
3185 {0x1FF8, 0x1F78, 0x039F}, {0x1FF9, 0x1F79, 0x1FF9}, /* 1FF8 */
3186 {0x1FFA, 0x1F7C, 0x03A9}, {0x1FFB, 0x1F7D, 0x1FFB}, /* 1FFA */
3187 {0x1FFC, 0x1FF3, 0x03A9}, {0x1FFD, 0x1FFD, 0x1FFD}, /* 1FFC */
3188 {0x1FFE, 0x1FFE, 0x1FFE}, {0x1FFF, 0x1FFF, 0x1FFF} /* 1FFE */
3189 };
3190
3191 static const MY_UNICASE_CHARACTER u520p21[] = {
3192 {0x2100, 0x2100, 0x2100}, {0x2101, 0x2101, 0x2101}, /* 2100 */
3193 {0x2102, 0x2102, 0x2102}, {0x2103, 0x2103, 0x2103}, /* 2102 */
3194 {0x2104, 0x2104, 0x2104}, {0x2105, 0x2105, 0x2105}, /* 2104 */
3195 {0x2106, 0x2106, 0x2106}, {0x2107, 0x2107, 0x2107}, /* 2106 */
3196 {0x2108, 0x2108, 0x2108}, {0x2109, 0x2109, 0x2109}, /* 2108 */
3197 {0x210A, 0x210A, 0x210A}, {0x210B, 0x210B, 0x210B}, /* 210A */
3198 {0x210C, 0x210C, 0x210C}, {0x210D, 0x210D, 0x210D}, /* 210C */
3199 {0x210E, 0x210E, 0x210E}, {0x210F, 0x210F, 0x210F}, /* 210E */
3200 {0x2110, 0x2110, 0x2110}, {0x2111, 0x2111, 0x2111}, /* 2110 */
3201 {0x2112, 0x2112, 0x2112}, {0x2113, 0x2113, 0x2113}, /* 2112 */
3202 {0x2114, 0x2114, 0x2114}, {0x2115, 0x2115, 0x2115}, /* 2114 */
3203 {0x2116, 0x2116, 0x2116}, {0x2117, 0x2117, 0x2117}, /* 2116 */
3204 {0x2118, 0x2118, 0x2118}, {0x2119, 0x2119, 0x2119}, /* 2118 */
3205 {0x211A, 0x211A, 0x211A}, {0x211B, 0x211B, 0x211B}, /* 211A */
3206 {0x211C, 0x211C, 0x211C}, {0x211D, 0x211D, 0x211D}, /* 211C */
3207 {0x211E, 0x211E, 0x211E}, {0x211F, 0x211F, 0x211F}, /* 211E */
3208 {0x2120, 0x2120, 0x2120}, {0x2121, 0x2121, 0x2121}, /* 2120 */
3209 {0x2122, 0x2122, 0x2122}, {0x2123, 0x2123, 0x2123}, /* 2122 */
3210 {0x2124, 0x2124, 0x2124}, {0x2125, 0x2125, 0x2125}, /* 2124 */
3211 {0x2126, 0x03C9, 0x2126}, {0x2127, 0x2127, 0x2127}, /* 2126 */
3212 {0x2128, 0x2128, 0x2128}, {0x2129, 0x2129, 0x2129}, /* 2128 */
3213 {0x212A, 0x006B, 0x212A}, {0x212B, 0x00E5, 0x212B}, /* 212A */
3214 {0x212C, 0x212C, 0x212C}, {0x212D, 0x212D, 0x212D}, /* 212C */
3215 {0x212E, 0x212E, 0x212E}, {0x212F, 0x212F, 0x212F}, /* 212E */
3216 {0x2130, 0x2130, 0x2130}, {0x2131, 0x2131, 0x2131}, /* 2130 */
3217 {0x2132, 0x214E, 0x2132}, {0x2133, 0x2133, 0x2133}, /* 2132 */
3218 {0x2134, 0x2134, 0x2134}, {0x2135, 0x2135, 0x2135}, /* 2134 */
3219 {0x2136, 0x2136, 0x2136}, {0x2137, 0x2137, 0x2137}, /* 2136 */
3220 {0x2138, 0x2138, 0x2138}, {0x2139, 0x2139, 0x2139}, /* 2138 */
3221 {0x213A, 0x213A, 0x213A}, {0x213B, 0x213B, 0x213B}, /* 213A */
3222 {0x213C, 0x213C, 0x213C}, {0x213D, 0x213D, 0x213D}, /* 213C */
3223 {0x213E, 0x213E, 0x213E}, {0x213F, 0x213F, 0x213F}, /* 213E */
3224 {0x2140, 0x2140, 0x2140}, {0x2141, 0x2141, 0x2141}, /* 2140 */
3225 {0x2142, 0x2142, 0x2142}, {0x2143, 0x2143, 0x2143}, /* 2142 */
3226 {0x2144, 0x2144, 0x2144}, {0x2145, 0x2145, 0x2145}, /* 2144 */
3227 {0x2146, 0x2146, 0x2146}, {0x2147, 0x2147, 0x2147}, /* 2146 */
3228 {0x2148, 0x2148, 0x2148}, {0x2149, 0x2149, 0x2149}, /* 2148 */
3229 {0x214A, 0x214A, 0x214A}, {0x214B, 0x214B, 0x214B}, /* 214A */
3230 {0x214C, 0x214C, 0x214C}, {0x214D, 0x214D, 0x214D}, /* 214C */
3231 {0x2132, 0x214E, 0x2132}, {0x214F, 0x214F, 0x214F}, /* 214E */
3232 {0x2150, 0x2150, 0x2150}, {0x2151, 0x2151, 0x2151}, /* 2150 */
3233 {0x2152, 0x2152, 0x2152}, {0x2153, 0x2153, 0x2153}, /* 2152 */
3234 {0x2154, 0x2154, 0x2154}, {0x2155, 0x2155, 0x2155}, /* 2154 */
3235 {0x2156, 0x2156, 0x2156}, {0x2157, 0x2157, 0x2157}, /* 2156 */
3236 {0x2158, 0x2158, 0x2158}, {0x2159, 0x2159, 0x2159}, /* 2158 */
3237 {0x215A, 0x215A, 0x215A}, {0x215B, 0x215B, 0x215B}, /* 215A */
3238 {0x215C, 0x215C, 0x215C}, {0x215D, 0x215D, 0x215D}, /* 215C */
3239 {0x215E, 0x215E, 0x215E}, {0x215F, 0x215F, 0x215F}, /* 215E */
3240 {0x2160, 0x2170, 0x2160}, {0x2161, 0x2171, 0x2161}, /* 2160 */
3241 {0x2162, 0x2172, 0x2162}, {0x2163, 0x2173, 0x2163}, /* 2162 */
3242 {0x2164, 0x2174, 0x2164}, {0x2165, 0x2175, 0x2165}, /* 2164 */
3243 {0x2166, 0x2176, 0x2166}, {0x2167, 0x2177, 0x2167}, /* 2166 */
3244 {0x2168, 0x2178, 0x2168}, {0x2169, 0x2179, 0x2169}, /* 2168 */
3245 {0x216A, 0x217A, 0x216A}, {0x216B, 0x217B, 0x216B}, /* 216A */
3246 {0x216C, 0x217C, 0x216C}, {0x216D, 0x217D, 0x216D}, /* 216C */
3247 {0x216E, 0x217E, 0x216E}, {0x216F, 0x217F, 0x216F}, /* 216E */
3248 {0x2160, 0x2170, 0x2160}, {0x2161, 0x2171, 0x2161}, /* 2170 */
3249 {0x2162, 0x2172, 0x2162}, {0x2163, 0x2173, 0x2163}, /* 2172 */
3250 {0x2164, 0x2174, 0x2164}, {0x2165, 0x2175, 0x2165}, /* 2174 */
3251 {0x2166, 0x2176, 0x2166}, {0x2167, 0x2177, 0x2167}, /* 2176 */
3252 {0x2168, 0x2178, 0x2168}, {0x2169, 0x2179, 0x2169}, /* 2178 */
3253 {0x216A, 0x217A, 0x216A}, {0x216B, 0x217B, 0x216B}, /* 217A */
3254 {0x216C, 0x217C, 0x216C}, {0x216D, 0x217D, 0x216D}, /* 217C */
3255 {0x216E, 0x217E, 0x216E}, {0x216F, 0x217F, 0x216F}, /* 217E */
3256 {0x2180, 0x2180, 0x2180}, {0x2181, 0x2181, 0x2181}, /* 2180 */
3257 {0x2182, 0x2182, 0x2182}, {0x2183, 0x2184, 0x2183}, /* 2182 */
3258 {0x2183, 0x2184, 0x2183}, {0x2185, 0x2185, 0x2185}, /* 2184 */
3259 {0x2186, 0x2186, 0x2186}, {0x2187, 0x2187, 0x2187}, /* 2186 */
3260 {0x2188, 0x2188, 0x2188}, {0x2189, 0x2189, 0x2189}, /* 2188 */
3261 {0x218A, 0x218A, 0x218A}, {0x218B, 0x218B, 0x218B}, /* 218A */
3262 {0x218C, 0x218C, 0x218C}, {0x218D, 0x218D, 0x218D}, /* 218C */
3263 {0x218E, 0x218E, 0x218E}, {0x218F, 0x218F, 0x218F}, /* 218E */
3264 {0x2190, 0x2190, 0x2190}, {0x2191, 0x2191, 0x2191}, /* 2190 */
3265 {0x2192, 0x2192, 0x2192}, {0x2193, 0x2193, 0x2193}, /* 2192 */
3266 {0x2194, 0x2194, 0x2194}, {0x2195, 0x2195, 0x2195}, /* 2194 */
3267 {0x2196, 0x2196, 0x2196}, {0x2197, 0x2197, 0x2197}, /* 2196 */
3268 {0x2198, 0x2198, 0x2198}, {0x2199, 0x2199, 0x2199}, /* 2198 */
3269 {0x219A, 0x219A, 0x219A}, {0x219B, 0x219B, 0x219B}, /* 219A */
3270 {0x219C, 0x219C, 0x219C}, {0x219D, 0x219D, 0x219D}, /* 219C */
3271 {0x219E, 0x219E, 0x219E}, {0x219F, 0x219F, 0x219F}, /* 219E */
3272 {0x21A0, 0x21A0, 0x21A0}, {0x21A1, 0x21A1, 0x21A1}, /* 21A0 */
3273 {0x21A2, 0x21A2, 0x21A2}, {0x21A3, 0x21A3, 0x21A3}, /* 21A2 */
3274 {0x21A4, 0x21A4, 0x21A4}, {0x21A5, 0x21A5, 0x21A5}, /* 21A4 */
3275 {0x21A6, 0x21A6, 0x21A6}, {0x21A7, 0x21A7, 0x21A7}, /* 21A6 */
3276 {0x21A8, 0x21A8, 0x21A8}, {0x21A9, 0x21A9, 0x21A9}, /* 21A8 */
3277 {0x21AA, 0x21AA, 0x21AA}, {0x21AB, 0x21AB, 0x21AB}, /* 21AA */
3278 {0x21AC, 0x21AC, 0x21AC}, {0x21AD, 0x21AD, 0x21AD}, /* 21AC */
3279 {0x21AE, 0x21AE, 0x21AE}, {0x21AF, 0x21AF, 0x21AF}, /* 21AE */
3280 {0x21B0, 0x21B0, 0x21B0}, {0x21B1, 0x21B1, 0x21B1}, /* 21B0 */
3281 {0x21B2, 0x21B2, 0x21B2}, {0x21B3, 0x21B3, 0x21B3}, /* 21B2 */
3282 {0x21B4, 0x21B4, 0x21B4}, {0x21B5, 0x21B5, 0x21B5}, /* 21B4 */
3283 {0x21B6, 0x21B6, 0x21B6}, {0x21B7, 0x21B7, 0x21B7}, /* 21B6 */
3284 {0x21B8, 0x21B8, 0x21B8}, {0x21B9, 0x21B9, 0x21B9}, /* 21B8 */
3285 {0x21BA, 0x21BA, 0x21BA}, {0x21BB, 0x21BB, 0x21BB}, /* 21BA */
3286 {0x21BC, 0x21BC, 0x21BC}, {0x21BD, 0x21BD, 0x21BD}, /* 21BC */
3287 {0x21BE, 0x21BE, 0x21BE}, {0x21BF, 0x21BF, 0x21BF}, /* 21BE */
3288 {0x21C0, 0x21C0, 0x21C0}, {0x21C1, 0x21C1, 0x21C1}, /* 21C0 */
3289 {0x21C2, 0x21C2, 0x21C2}, {0x21C3, 0x21C3, 0x21C3}, /* 21C2 */
3290 {0x21C4, 0x21C4, 0x21C4}, {0x21C5, 0x21C5, 0x21C5}, /* 21C4 */
3291 {0x21C6, 0x21C6, 0x21C6}, {0x21C7, 0x21C7, 0x21C7}, /* 21C6 */
3292 {0x21C8, 0x21C8, 0x21C8}, {0x21C9, 0x21C9, 0x21C9}, /* 21C8 */
3293 {0x21CA, 0x21CA, 0x21CA}, {0x21CB, 0x21CB, 0x21CB}, /* 21CA */
3294 {0x21CC, 0x21CC, 0x21CC}, {0x21CD, 0x21CD, 0x21CD}, /* 21CC */
3295 {0x21CE, 0x21CE, 0x21CE}, {0x21CF, 0x21CF, 0x21CF}, /* 21CE */
3296 {0x21D0, 0x21D0, 0x21D0}, {0x21D1, 0x21D1, 0x21D1}, /* 21D0 */
3297 {0x21D2, 0x21D2, 0x21D2}, {0x21D3, 0x21D3, 0x21D3}, /* 21D2 */
3298 {0x21D4, 0x21D4, 0x21D4}, {0x21D5, 0x21D5, 0x21D5}, /* 21D4 */
3299 {0x21D6, 0x21D6, 0x21D6}, {0x21D7, 0x21D7, 0x21D7}, /* 21D6 */
3300 {0x21D8, 0x21D8, 0x21D8}, {0x21D9, 0x21D9, 0x21D9}, /* 21D8 */
3301 {0x21DA, 0x21DA, 0x21DA}, {0x21DB, 0x21DB, 0x21DB}, /* 21DA */
3302 {0x21DC, 0x21DC, 0x21DC}, {0x21DD, 0x21DD, 0x21DD}, /* 21DC */
3303 {0x21DE, 0x21DE, 0x21DE}, {0x21DF, 0x21DF, 0x21DF}, /* 21DE */
3304 {0x21E0, 0x21E0, 0x21E0}, {0x21E1, 0x21E1, 0x21E1}, /* 21E0 */
3305 {0x21E2, 0x21E2, 0x21E2}, {0x21E3, 0x21E3, 0x21E3}, /* 21E2 */
3306 {0x21E4, 0x21E4, 0x21E4}, {0x21E5, 0x21E5, 0x21E5}, /* 21E4 */
3307 {0x21E6, 0x21E6, 0x21E6}, {0x21E7, 0x21E7, 0x21E7}, /* 21E6 */
3308 {0x21E8, 0x21E8, 0x21E8}, {0x21E9, 0x21E9, 0x21E9}, /* 21E8 */
3309 {0x21EA, 0x21EA, 0x21EA}, {0x21EB, 0x21EB, 0x21EB}, /* 21EA */
3310 {0x21EC, 0x21EC, 0x21EC}, {0x21ED, 0x21ED, 0x21ED}, /* 21EC */
3311 {0x21EE, 0x21EE, 0x21EE}, {0x21EF, 0x21EF, 0x21EF}, /* 21EE */
3312 {0x21F0, 0x21F0, 0x21F0}, {0x21F1, 0x21F1, 0x21F1}, /* 21F0 */
3313 {0x21F2, 0x21F2, 0x21F2}, {0x21F3, 0x21F3, 0x21F3}, /* 21F2 */
3314 {0x21F4, 0x21F4, 0x21F4}, {0x21F5, 0x21F5, 0x21F5}, /* 21F4 */
3315 {0x21F6, 0x21F6, 0x21F6}, {0x21F7, 0x21F7, 0x21F7}, /* 21F6 */
3316 {0x21F8, 0x21F8, 0x21F8}, {0x21F9, 0x21F9, 0x21F9}, /* 21F8 */
3317 {0x21FA, 0x21FA, 0x21FA}, {0x21FB, 0x21FB, 0x21FB}, /* 21FA */
3318 {0x21FC, 0x21FC, 0x21FC}, {0x21FD, 0x21FD, 0x21FD}, /* 21FC */
3319 {0x21FE, 0x21FE, 0x21FE}, {0x21FF, 0x21FF, 0x21FF} /* 21FE */
3320 };
3321
3322 static const MY_UNICASE_CHARACTER u520p24[] = {
3323 {0x2400, 0x2400, 0x2400}, {0x2401, 0x2401, 0x2401}, /* 2400 */
3324 {0x2402, 0x2402, 0x2402}, {0x2403, 0x2403, 0x2403}, /* 2402 */
3325 {0x2404, 0x2404, 0x2404}, {0x2405, 0x2405, 0x2405}, /* 2404 */
3326 {0x2406, 0x2406, 0x2406}, {0x2407, 0x2407, 0x2407}, /* 2406 */
3327 {0x2408, 0x2408, 0x2408}, {0x2409, 0x2409, 0x2409}, /* 2408 */
3328 {0x240A, 0x240A, 0x240A}, {0x240B, 0x240B, 0x240B}, /* 240A */
3329 {0x240C, 0x240C, 0x240C}, {0x240D, 0x240D, 0x240D}, /* 240C */
3330 {0x240E, 0x240E, 0x240E}, {0x240F, 0x240F, 0x240F}, /* 240E */
3331 {0x2410, 0x2410, 0x2410}, {0x2411, 0x2411, 0x2411}, /* 2410 */
3332 {0x2412, 0x2412, 0x2412}, {0x2413, 0x2413, 0x2413}, /* 2412 */
3333 {0x2414, 0x2414, 0x2414}, {0x2415, 0x2415, 0x2415}, /* 2414 */
3334 {0x2416, 0x2416, 0x2416}, {0x2417, 0x2417, 0x2417}, /* 2416 */
3335 {0x2418, 0x2418, 0x2418}, {0x2419, 0x2419, 0x2419}, /* 2418 */
3336 {0x241A, 0x241A, 0x241A}, {0x241B, 0x241B, 0x241B}, /* 241A */
3337 {0x241C, 0x241C, 0x241C}, {0x241D, 0x241D, 0x241D}, /* 241C */
3338 {0x241E, 0x241E, 0x241E}, {0x241F, 0x241F, 0x241F}, /* 241E */
3339 {0x2420, 0x2420, 0x2420}, {0x2421, 0x2421, 0x2421}, /* 2420 */
3340 {0x2422, 0x2422, 0x2422}, {0x2423, 0x2423, 0x2423}, /* 2422 */
3341 {0x2424, 0x2424, 0x2424}, {0x2425, 0x2425, 0x2425}, /* 2424 */
3342 {0x2426, 0x2426, 0x2426}, {0x2427, 0x2427, 0x2427}, /* 2426 */
3343 {0x2428, 0x2428, 0x2428}, {0x2429, 0x2429, 0x2429}, /* 2428 */
3344 {0x242A, 0x242A, 0x242A}, {0x242B, 0x242B, 0x242B}, /* 242A */
3345 {0x242C, 0x242C, 0x242C}, {0x242D, 0x242D, 0x242D}, /* 242C */
3346 {0x242E, 0x242E, 0x242E}, {0x242F, 0x242F, 0x242F}, /* 242E */
3347 {0x2430, 0x2430, 0x2430}, {0x2431, 0x2431, 0x2431}, /* 2430 */
3348 {0x2432, 0x2432, 0x2432}, {0x2433, 0x2433, 0x2433}, /* 2432 */
3349 {0x2434, 0x2434, 0x2434}, {0x2435, 0x2435, 0x2435}, /* 2434 */
3350 {0x2436, 0x2436, 0x2436}, {0x2437, 0x2437, 0x2437}, /* 2436 */
3351 {0x2438, 0x2438, 0x2438}, {0x2439, 0x2439, 0x2439}, /* 2438 */
3352 {0x243A, 0x243A, 0x243A}, {0x243B, 0x243B, 0x243B}, /* 243A */
3353 {0x243C, 0x243C, 0x243C}, {0x243D, 0x243D, 0x243D}, /* 243C */
3354 {0x243E, 0x243E, 0x243E}, {0x243F, 0x243F, 0x243F}, /* 243E */
3355 {0x2440, 0x2440, 0x2440}, {0x2441, 0x2441, 0x2441}, /* 2440 */
3356 {0x2442, 0x2442, 0x2442}, {0x2443, 0x2443, 0x2443}, /* 2442 */
3357 {0x2444, 0x2444, 0x2444}, {0x2445, 0x2445, 0x2445}, /* 2444 */
3358 {0x2446, 0x2446, 0x2446}, {0x2447, 0x2447, 0x2447}, /* 2446 */
3359 {0x2448, 0x2448, 0x2448}, {0x2449, 0x2449, 0x2449}, /* 2448 */
3360 {0x244A, 0x244A, 0x244A}, {0x244B, 0x244B, 0x244B}, /* 244A */
3361 {0x244C, 0x244C, 0x244C}, {0x244D, 0x244D, 0x244D}, /* 244C */
3362 {0x244E, 0x244E, 0x244E}, {0x244F, 0x244F, 0x244F}, /* 244E */
3363 {0x2450, 0x2450, 0x2450}, {0x2451, 0x2451, 0x2451}, /* 2450 */
3364 {0x2452, 0x2452, 0x2452}, {0x2453, 0x2453, 0x2453}, /* 2452 */
3365 {0x2454, 0x2454, 0x2454}, {0x2455, 0x2455, 0x2455}, /* 2454 */
3366 {0x2456, 0x2456, 0x2456}, {0x2457, 0x2457, 0x2457}, /* 2456 */
3367 {0x2458, 0x2458, 0x2458}, {0x2459, 0x2459, 0x2459}, /* 2458 */
3368 {0x245A, 0x245A, 0x245A}, {0x245B, 0x245B, 0x245B}, /* 245A */
3369 {0x245C, 0x245C, 0x245C}, {0x245D, 0x245D, 0x245D}, /* 245C */
3370 {0x245E, 0x245E, 0x245E}, {0x245F, 0x245F, 0x245F}, /* 245E */
3371 {0x2460, 0x2460, 0x2460}, {0x2461, 0x2461, 0x2461}, /* 2460 */
3372 {0x2462, 0x2462, 0x2462}, {0x2463, 0x2463, 0x2463}, /* 2462 */
3373 {0x2464, 0x2464, 0x2464}, {0x2465, 0x2465, 0x2465}, /* 2464 */
3374 {0x2466, 0x2466, 0x2466}, {0x2467, 0x2467, 0x2467}, /* 2466 */
3375 {0x2468, 0x2468, 0x2468}, {0x2469, 0x2469, 0x2469}, /* 2468 */
3376 {0x246A, 0x246A, 0x246A}, {0x246B, 0x246B, 0x246B}, /* 246A */
3377 {0x246C, 0x246C, 0x246C}, {0x246D, 0x246D, 0x246D}, /* 246C */
3378 {0x246E, 0x246E, 0x246E}, {0x246F, 0x246F, 0x246F}, /* 246E */
3379 {0x2470, 0x2470, 0x2470}, {0x2471, 0x2471, 0x2471}, /* 2470 */
3380 {0x2472, 0x2472, 0x2472}, {0x2473, 0x2473, 0x2473}, /* 2472 */
3381 {0x2474, 0x2474, 0x2474}, {0x2475, 0x2475, 0x2475}, /* 2474 */
3382 {0x2476, 0x2476, 0x2476}, {0x2477, 0x2477, 0x2477}, /* 2476 */
3383 {0x2478, 0x2478, 0x2478}, {0x2479, 0x2479, 0x2479}, /* 2478 */
3384 {0x247A, 0x247A, 0x247A}, {0x247B, 0x247B, 0x247B}, /* 247A */
3385 {0x247C, 0x247C, 0x247C}, {0x247D, 0x247D, 0x247D}, /* 247C */
3386 {0x247E, 0x247E, 0x247E}, {0x247F, 0x247F, 0x247F}, /* 247E */
3387 {0x2480, 0x2480, 0x2480}, {0x2481, 0x2481, 0x2481}, /* 2480 */
3388 {0x2482, 0x2482, 0x2482}, {0x2483, 0x2483, 0x2483}, /* 2482 */
3389 {0x2484, 0x2484, 0x2484}, {0x2485, 0x2485, 0x2485}, /* 2484 */
3390 {0x2486, 0x2486, 0x2486}, {0x2487, 0x2487, 0x2487}, /* 2486 */
3391 {0x2488, 0x2488, 0x2488}, {0x2489, 0x2489, 0x2489}, /* 2488 */
3392 {0x248A, 0x248A, 0x248A}, {0x248B, 0x248B, 0x248B}, /* 248A */
3393 {0x248C, 0x248C, 0x248C}, {0x248D, 0x248D, 0x248D}, /* 248C */
3394 {0x248E, 0x248E, 0x248E}, {0x248F, 0x248F, 0x248F}, /* 248E */
3395 {0x2490, 0x2490, 0x2490}, {0x2491, 0x2491, 0x2491}, /* 2490 */
3396 {0x2492, 0x2492, 0x2492}, {0x2493, 0x2493, 0x2493}, /* 2492 */
3397 {0x2494, 0x2494, 0x2494}, {0x2495, 0x2495, 0x2495}, /* 2494 */
3398 {0x2496, 0x2496, 0x2496}, {0x2497, 0x2497, 0x2497}, /* 2496 */
3399 {0x2498, 0x2498, 0x2498}, {0x2499, 0x2499, 0x2499}, /* 2498 */
3400 {0x249A, 0x249A, 0x249A}, {0x249B, 0x249B, 0x249B}, /* 249A */
3401 {0x249C, 0x249C, 0x249C}, {0x249D, 0x249D, 0x249D}, /* 249C */
3402 {0x249E, 0x249E, 0x249E}, {0x249F, 0x249F, 0x249F}, /* 249E */
3403 {0x24A0, 0x24A0, 0x24A0}, {0x24A1, 0x24A1, 0x24A1}, /* 24A0 */
3404 {0x24A2, 0x24A2, 0x24A2}, {0x24A3, 0x24A3, 0x24A3}, /* 24A2 */
3405 {0x24A4, 0x24A4, 0x24A4}, {0x24A5, 0x24A5, 0x24A5}, /* 24A4 */
3406 {0x24A6, 0x24A6, 0x24A6}, {0x24A7, 0x24A7, 0x24A7}, /* 24A6 */
3407 {0x24A8, 0x24A8, 0x24A8}, {0x24A9, 0x24A9, 0x24A9}, /* 24A8 */
3408 {0x24AA, 0x24AA, 0x24AA}, {0x24AB, 0x24AB, 0x24AB}, /* 24AA */
3409 {0x24AC, 0x24AC, 0x24AC}, {0x24AD, 0x24AD, 0x24AD}, /* 24AC */
3410 {0x24AE, 0x24AE, 0x24AE}, {0x24AF, 0x24AF, 0x24AF}, /* 24AE */
3411 {0x24B0, 0x24B0, 0x24B0}, {0x24B1, 0x24B1, 0x24B1}, /* 24B0 */
3412 {0x24B2, 0x24B2, 0x24B2}, {0x24B3, 0x24B3, 0x24B3}, /* 24B2 */
3413 {0x24B4, 0x24B4, 0x24B4}, {0x24B5, 0x24B5, 0x24B5}, /* 24B4 */
3414 {0x24B6, 0x24D0, 0x24B6}, {0x24B7, 0x24D1, 0x24B7}, /* 24B6 */
3415 {0x24B8, 0x24D2, 0x24B8}, {0x24B9, 0x24D3, 0x24B9}, /* 24B8 */
3416 {0x24BA, 0x24D4, 0x24BA}, {0x24BB, 0x24D5, 0x24BB}, /* 24BA */
3417 {0x24BC, 0x24D6, 0x24BC}, {0x24BD, 0x24D7, 0x24BD}, /* 24BC */
3418 {0x24BE, 0x24D8, 0x24BE}, {0x24BF, 0x24D9, 0x24BF}, /* 24BE */
3419 {0x24C0, 0x24DA, 0x24C0}, {0x24C1, 0x24DB, 0x24C1}, /* 24C0 */
3420 {0x24C2, 0x24DC, 0x24C2}, {0x24C3, 0x24DD, 0x24C3}, /* 24C2 */
3421 {0x24C4, 0x24DE, 0x24C4}, {0x24C5, 0x24DF, 0x24C5}, /* 24C4 */
3422 {0x24C6, 0x24E0, 0x24C6}, {0x24C7, 0x24E1, 0x24C7}, /* 24C6 */
3423 {0x24C8, 0x24E2, 0x24C8}, {0x24C9, 0x24E3, 0x24C9}, /* 24C8 */
3424 {0x24CA, 0x24E4, 0x24CA}, {0x24CB, 0x24E5, 0x24CB}, /* 24CA */
3425 {0x24CC, 0x24E6, 0x24CC}, {0x24CD, 0x24E7, 0x24CD}, /* 24CC */
3426 {0x24CE, 0x24E8, 0x24CE}, {0x24CF, 0x24E9, 0x24CF}, /* 24CE */
3427 {0x24B6, 0x24D0, 0x24B6}, {0x24B7, 0x24D1, 0x24B7}, /* 24D0 */
3428 {0x24B8, 0x24D2, 0x24B8}, {0x24B9, 0x24D3, 0x24B9}, /* 24D2 */
3429 {0x24BA, 0x24D4, 0x24BA}, {0x24BB, 0x24D5, 0x24BB}, /* 24D4 */
3430 {0x24BC, 0x24D6, 0x24BC}, {0x24BD, 0x24D7, 0x24BD}, /* 24D6 */
3431 {0x24BE, 0x24D8, 0x24BE}, {0x24BF, 0x24D9, 0x24BF}, /* 24D8 */
3432 {0x24C0, 0x24DA, 0x24C0}, {0x24C1, 0x24DB, 0x24C1}, /* 24DA */
3433 {0x24C2, 0x24DC, 0x24C2}, {0x24C3, 0x24DD, 0x24C3}, /* 24DC */
3434 {0x24C4, 0x24DE, 0x24C4}, {0x24C5, 0x24DF, 0x24C5}, /* 24DE */
3435 {0x24C6, 0x24E0, 0x24C6}, {0x24C7, 0x24E1, 0x24C7}, /* 24E0 */
3436 {0x24C8, 0x24E2, 0x24C8}, {0x24C9, 0x24E3, 0x24C9}, /* 24E2 */
3437 {0x24CA, 0x24E4, 0x24CA}, {0x24CB, 0x24E5, 0x24CB}, /* 24E4 */
3438 {0x24CC, 0x24E6, 0x24CC}, {0x24CD, 0x24E7, 0x24CD}, /* 24E6 */
3439 {0x24CE, 0x24E8, 0x24CE}, {0x24CF, 0x24E9, 0x24CF}, /* 24E8 */
3440 {0x24EA, 0x24EA, 0x24EA}, {0x24EB, 0x24EB, 0x24EB}, /* 24EA */
3441 {0x24EC, 0x24EC, 0x24EC}, {0x24ED, 0x24ED, 0x24ED}, /* 24EC */
3442 {0x24EE, 0x24EE, 0x24EE}, {0x24EF, 0x24EF, 0x24EF}, /* 24EE */
3443 {0x24F0, 0x24F0, 0x24F0}, {0x24F1, 0x24F1, 0x24F1}, /* 24F0 */
3444 {0x24F2, 0x24F2, 0x24F2}, {0x24F3, 0x24F3, 0x24F3}, /* 24F2 */
3445 {0x24F4, 0x24F4, 0x24F4}, {0x24F5, 0x24F5, 0x24F5}, /* 24F4 */
3446 {0x24F6, 0x24F6, 0x24F6}, {0x24F7, 0x24F7, 0x24F7}, /* 24F6 */
3447 {0x24F8, 0x24F8, 0x24F8}, {0x24F9, 0x24F9, 0x24F9}, /* 24F8 */
3448 {0x24FA, 0x24FA, 0x24FA}, {0x24FB, 0x24FB, 0x24FB}, /* 24FA */
3449 {0x24FC, 0x24FC, 0x24FC}, {0x24FD, 0x24FD, 0x24FD}, /* 24FC */
3450 {0x24FE, 0x24FE, 0x24FE}, {0x24FF, 0x24FF, 0x24FF} /* 24FE */
3451 };
3452
3453 static const MY_UNICASE_CHARACTER u520p2C[] = {
3454 {0x2C00, 0x2C30, 0x2C00}, {0x2C01, 0x2C31, 0x2C01}, /* 2C00 */
3455 {0x2C02, 0x2C32, 0x2C02}, {0x2C03, 0x2C33, 0x2C03}, /* 2C02 */
3456 {0x2C04, 0x2C34, 0x2C04}, {0x2C05, 0x2C35, 0x2C05}, /* 2C04 */
3457 {0x2C06, 0x2C36, 0x2C06}, {0x2C07, 0x2C37, 0x2C07}, /* 2C06 */
3458 {0x2C08, 0x2C38, 0x2C08}, {0x2C09, 0x2C39, 0x2C09}, /* 2C08 */
3459 {0x2C0A, 0x2C3A, 0x2C0A}, {0x2C0B, 0x2C3B, 0x2C0B}, /* 2C0A */
3460 {0x2C0C, 0x2C3C, 0x2C0C}, {0x2C0D, 0x2C3D, 0x2C0D}, /* 2C0C */
3461 {0x2C0E, 0x2C3E, 0x2C0E}, {0x2C0F, 0x2C3F, 0x2C0F}, /* 2C0E */
3462 {0x2C10, 0x2C40, 0x2C10}, {0x2C11, 0x2C41, 0x2C11}, /* 2C10 */
3463 {0x2C12, 0x2C42, 0x2C12}, {0x2C13, 0x2C43, 0x2C13}, /* 2C12 */
3464 {0x2C14, 0x2C44, 0x2C14}, {0x2C15, 0x2C45, 0x2C15}, /* 2C14 */
3465 {0x2C16, 0x2C46, 0x2C16}, {0x2C17, 0x2C47, 0x2C17}, /* 2C16 */
3466 {0x2C18, 0x2C48, 0x2C18}, {0x2C19, 0x2C49, 0x2C19}, /* 2C18 */
3467 {0x2C1A, 0x2C4A, 0x2C1A}, {0x2C1B, 0x2C4B, 0x2C1B}, /* 2C1A */
3468 {0x2C1C, 0x2C4C, 0x2C1C}, {0x2C1D, 0x2C4D, 0x2C1D}, /* 2C1C */
3469 {0x2C1E, 0x2C4E, 0x2C1E}, {0x2C1F, 0x2C4F, 0x2C1F}, /* 2C1E */
3470 {0x2C20, 0x2C50, 0x2C20}, {0x2C21, 0x2C51, 0x2C21}, /* 2C20 */
3471 {0x2C22, 0x2C52, 0x2C22}, {0x2C23, 0x2C53, 0x2C23}, /* 2C22 */
3472 {0x2C24, 0x2C54, 0x2C24}, {0x2C25, 0x2C55, 0x2C25}, /* 2C24 */
3473 {0x2C26, 0x2C56, 0x2C26}, {0x2C27, 0x2C57, 0x2C27}, /* 2C26 */
3474 {0x2C28, 0x2C58, 0x2C28}, {0x2C29, 0x2C59, 0x2C29}, /* 2C28 */
3475 {0x2C2A, 0x2C5A, 0x2C2A}, {0x2C2B, 0x2C5B, 0x2C2B}, /* 2C2A */
3476 {0x2C2C, 0x2C5C, 0x2C2C}, {0x2C2D, 0x2C5D, 0x2C2D}, /* 2C2C */
3477 {0x2C2E, 0x2C5E, 0x2C2E}, {0x2C2F, 0x2C2F, 0x2C2F}, /* 2C2E */
3478 {0x2C00, 0x2C30, 0x2C00}, {0x2C01, 0x2C31, 0x2C01}, /* 2C30 */
3479 {0x2C02, 0x2C32, 0x2C02}, {0x2C03, 0x2C33, 0x2C03}, /* 2C32 */
3480 {0x2C04, 0x2C34, 0x2C04}, {0x2C05, 0x2C35, 0x2C05}, /* 2C34 */
3481 {0x2C06, 0x2C36, 0x2C06}, {0x2C07, 0x2C37, 0x2C07}, /* 2C36 */
3482 {0x2C08, 0x2C38, 0x2C08}, {0x2C09, 0x2C39, 0x2C09}, /* 2C38 */
3483 {0x2C0A, 0x2C3A, 0x2C0A}, {0x2C0B, 0x2C3B, 0x2C0B}, /* 2C3A */
3484 {0x2C0C, 0x2C3C, 0x2C0C}, {0x2C0D, 0x2C3D, 0x2C0D}, /* 2C3C */
3485 {0x2C0E, 0x2C3E, 0x2C0E}, {0x2C0F, 0x2C3F, 0x2C0F}, /* 2C3E */
3486 {0x2C10, 0x2C40, 0x2C10}, {0x2C11, 0x2C41, 0x2C11}, /* 2C40 */
3487 {0x2C12, 0x2C42, 0x2C12}, {0x2C13, 0x2C43, 0x2C13}, /* 2C42 */
3488 {0x2C14, 0x2C44, 0x2C14}, {0x2C15, 0x2C45, 0x2C15}, /* 2C44 */
3489 {0x2C16, 0x2C46, 0x2C16}, {0x2C17, 0x2C47, 0x2C17}, /* 2C46 */
3490 {0x2C18, 0x2C48, 0x2C18}, {0x2C19, 0x2C49, 0x2C19}, /* 2C48 */
3491 {0x2C1A, 0x2C4A, 0x2C1A}, {0x2C1B, 0x2C4B, 0x2C1B}, /* 2C4A */
3492 {0x2C1C, 0x2C4C, 0x2C1C}, {0x2C1D, 0x2C4D, 0x2C1D}, /* 2C4C */
3493 {0x2C1E, 0x2C4E, 0x2C1E}, {0x2C1F, 0x2C4F, 0x2C1F}, /* 2C4E */
3494 {0x2C20, 0x2C50, 0x2C20}, {0x2C21, 0x2C51, 0x2C21}, /* 2C50 */
3495 {0x2C22, 0x2C52, 0x2C22}, {0x2C23, 0x2C53, 0x2C23}, /* 2C52 */
3496 {0x2C24, 0x2C54, 0x2C24}, {0x2C25, 0x2C55, 0x2C25}, /* 2C54 */
3497 {0x2C26, 0x2C56, 0x2C26}, {0x2C27, 0x2C57, 0x2C27}, /* 2C56 */
3498 {0x2C28, 0x2C58, 0x2C28}, {0x2C29, 0x2C59, 0x2C29}, /* 2C58 */
3499 {0x2C2A, 0x2C5A, 0x2C2A}, {0x2C2B, 0x2C5B, 0x2C2B}, /* 2C5A */
3500 {0x2C2C, 0x2C5C, 0x2C2C}, {0x2C2D, 0x2C5D, 0x2C2D}, /* 2C5C */
3501 {0x2C2E, 0x2C5E, 0x2C2E}, {0x2C5F, 0x2C5F, 0x2C5F}, /* 2C5E */
3502 {0x2C60, 0x2C61, 0x2C60}, {0x2C60, 0x2C61, 0x2C60}, /* 2C60 */
3503 {0x2C62, 0x026B, 0x2C62}, {0x2C63, 0x1D7D, 0x2C63}, /* 2C62 */
3504 {0x2C64, 0x027D, 0x2C64}, {0x023A, 0x2C65, 0x023A}, /* 2C64 */
3505 {0x023E, 0x2C66, 0x023E}, {0x2C67, 0x2C68, 0x2C67}, /* 2C66 */
3506 {0x2C67, 0x2C68, 0x2C67}, {0x2C69, 0x2C6A, 0x2C69}, /* 2C68 */
3507 {0x2C69, 0x2C6A, 0x2C69}, {0x2C6B, 0x2C6C, 0x2C6B}, /* 2C6A */
3508 {0x2C6B, 0x2C6C, 0x2C6B}, {0x2C6D, 0x0251, 0x2C6D}, /* 2C6C */
3509 {0x2C6E, 0x0271, 0x2C6E}, {0x2C6F, 0x0250, 0x2C6F}, /* 2C6E */
3510 {0x2C70, 0x0252, 0x2C70}, {0x2C71, 0x2C71, 0x2C71}, /* 2C70 */
3511 {0x2C72, 0x2C73, 0x2C72}, {0x2C72, 0x2C73, 0x2C72}, /* 2C72 */
3512 {0x2C74, 0x2C74, 0x2C74}, {0x2C75, 0x2C76, 0x2C75}, /* 2C74 */
3513 {0x2C75, 0x2C76, 0x2C75}, {0x2C77, 0x2C77, 0x2C77}, /* 2C76 */
3514 {0x2C78, 0x2C78, 0x2C78}, {0x2C79, 0x2C79, 0x2C79}, /* 2C78 */
3515 {0x2C7A, 0x2C7A, 0x2C7A}, {0x2C7B, 0x2C7B, 0x2C7B}, /* 2C7A */
3516 {0x2C7C, 0x2C7C, 0x2C7C}, {0x2C7D, 0x2C7D, 0x2C7D}, /* 2C7C */
3517 {0x2C7E, 0x023F, 0x2C7E}, {0x2C7F, 0x0240, 0x2C7F}, /* 2C7E */
3518 {0x2C80, 0x2C81, 0x2C80}, {0x2C80, 0x2C81, 0x2C80}, /* 2C80 */
3519 {0x2C82, 0x2C83, 0x2C82}, {0x2C82, 0x2C83, 0x2C82}, /* 2C82 */
3520 {0x2C84, 0x2C85, 0x2C84}, {0x2C84, 0x2C85, 0x2C84}, /* 2C84 */
3521 {0x2C86, 0x2C87, 0x2C86}, {0x2C86, 0x2C87, 0x2C86}, /* 2C86 */
3522 {0x2C88, 0x2C89, 0x2C88}, {0x2C88, 0x2C89, 0x2C88}, /* 2C88 */
3523 {0x2C8A, 0x2C8B, 0x2C8A}, {0x2C8A, 0x2C8B, 0x2C8A}, /* 2C8A */
3524 {0x2C8C, 0x2C8D, 0x2C8C}, {0x2C8C, 0x2C8D, 0x2C8C}, /* 2C8C */
3525 {0x2C8E, 0x2C8F, 0x2C8E}, {0x2C8E, 0x2C8F, 0x2C8E}, /* 2C8E */
3526 {0x2C90, 0x2C91, 0x2C90}, {0x2C90, 0x2C91, 0x2C90}, /* 2C90 */
3527 {0x2C92, 0x2C93, 0x2C92}, {0x2C92, 0x2C93, 0x2C92}, /* 2C92 */
3528 {0x2C94, 0x2C95, 0x2C94}, {0x2C94, 0x2C95, 0x2C94}, /* 2C94 */
3529 {0x2C96, 0x2C97, 0x2C96}, {0x2C96, 0x2C97, 0x2C96}, /* 2C96 */
3530 {0x2C98, 0x2C99, 0x2C98}, {0x2C98, 0x2C99, 0x2C98}, /* 2C98 */
3531 {0x2C9A, 0x2C9B, 0x2C9A}, {0x2C9A, 0x2C9B, 0x2C9A}, /* 2C9A */
3532 {0x2C9C, 0x2C9D, 0x2C9C}, {0x2C9C, 0x2C9D, 0x2C9C}, /* 2C9C */
3533 {0x2C9E, 0x2C9F, 0x2C9E}, {0x2C9E, 0x2C9F, 0x2C9E}, /* 2C9E */
3534 {0x2CA0, 0x2CA1, 0x2CA0}, {0x2CA0, 0x2CA1, 0x2CA0}, /* 2CA0 */
3535 {0x2CA2, 0x2CA3, 0x2CA2}, {0x2CA2, 0x2CA3, 0x2CA2}, /* 2CA2 */
3536 {0x2CA4, 0x2CA5, 0x2CA4}, {0x2CA4, 0x2CA5, 0x2CA4}, /* 2CA4 */
3537 {0x2CA6, 0x2CA7, 0x2CA6}, {0x2CA6, 0x2CA7, 0x2CA6}, /* 2CA6 */
3538 {0x2CA8, 0x2CA9, 0x2CA8}, {0x2CA8, 0x2CA9, 0x2CA8}, /* 2CA8 */
3539 {0x2CAA, 0x2CAB, 0x2CAA}, {0x2CAA, 0x2CAB, 0x2CAA}, /* 2CAA */
3540 {0x2CAC, 0x2CAD, 0x2CAC}, {0x2CAC, 0x2CAD, 0x2CAC}, /* 2CAC */
3541 {0x2CAE, 0x2CAF, 0x2CAE}, {0x2CAE, 0x2CAF, 0x2CAE}, /* 2CAE */
3542 {0x2CB0, 0x2CB1, 0x2CB0}, {0x2CB0, 0x2CB1, 0x2CB0}, /* 2CB0 */
3543 {0x2CB2, 0x2CB3, 0x2CB2}, {0x2CB2, 0x2CB3, 0x2CB2}, /* 2CB2 */
3544 {0x2CB4, 0x2CB5, 0x2CB4}, {0x2CB4, 0x2CB5, 0x2CB4}, /* 2CB4 */
3545 {0x2CB6, 0x2CB7, 0x2CB6}, {0x2CB6, 0x2CB7, 0x2CB6}, /* 2CB6 */
3546 {0x2CB8, 0x2CB9, 0x2CB8}, {0x2CB8, 0x2CB9, 0x2CB8}, /* 2CB8 */
3547 {0x2CBA, 0x2CBB, 0x2CBA}, {0x2CBA, 0x2CBB, 0x2CBA}, /* 2CBA */
3548 {0x2CBC, 0x2CBD, 0x2CBC}, {0x2CBC, 0x2CBD, 0x2CBC}, /* 2CBC */
3549 {0x2CBE, 0x2CBF, 0x2CBE}, {0x2CBE, 0x2CBF, 0x2CBE}, /* 2CBE */
3550 {0x2CC0, 0x2CC1, 0x2CC0}, {0x2CC0, 0x2CC1, 0x2CC0}, /* 2CC0 */
3551 {0x2CC2, 0x2CC3, 0x2CC2}, {0x2CC2, 0x2CC3, 0x2CC2}, /* 2CC2 */
3552 {0x2CC4, 0x2CC5, 0x2CC4}, {0x2CC4, 0x2CC5, 0x2CC4}, /* 2CC4 */
3553 {0x2CC6, 0x2CC7, 0x2CC6}, {0x2CC6, 0x2CC7, 0x2CC6}, /* 2CC6 */
3554 {0x2CC8, 0x2CC9, 0x2CC8}, {0x2CC8, 0x2CC9, 0x2CC8}, /* 2CC8 */
3555 {0x2CCA, 0x2CCB, 0x2CCA}, {0x2CCA, 0x2CCB, 0x2CCA}, /* 2CCA */
3556 {0x2CCC, 0x2CCD, 0x2CCC}, {0x2CCC, 0x2CCD, 0x2CCC}, /* 2CCC */
3557 {0x2CCE, 0x2CCF, 0x2CCE}, {0x2CCE, 0x2CCF, 0x2CCE}, /* 2CCE */
3558 {0x2CD0, 0x2CD1, 0x2CD0}, {0x2CD0, 0x2CD1, 0x2CD0}, /* 2CD0 */
3559 {0x2CD2, 0x2CD3, 0x2CD2}, {0x2CD2, 0x2CD3, 0x2CD2}, /* 2CD2 */
3560 {0x2CD4, 0x2CD5, 0x2CD4}, {0x2CD4, 0x2CD5, 0x2CD4}, /* 2CD4 */
3561 {0x2CD6, 0x2CD7, 0x2CD6}, {0x2CD6, 0x2CD7, 0x2CD6}, /* 2CD6 */
3562 {0x2CD8, 0x2CD9, 0x2CD8}, {0x2CD8, 0x2CD9, 0x2CD8}, /* 2CD8 */
3563 {0x2CDA, 0x2CDB, 0x2CDA}, {0x2CDA, 0x2CDB, 0x2CDA}, /* 2CDA */
3564 {0x2CDC, 0x2CDD, 0x2CDC}, {0x2CDC, 0x2CDD, 0x2CDC}, /* 2CDC */
3565 {0x2CDE, 0x2CDF, 0x2CDE}, {0x2CDE, 0x2CDF, 0x2CDE}, /* 2CDE */
3566 {0x2CE0, 0x2CE1, 0x2CE0}, {0x2CE0, 0x2CE1, 0x2CE0}, /* 2CE0 */
3567 {0x2CE2, 0x2CE3, 0x2CE2}, {0x2CE2, 0x2CE3, 0x2CE2}, /* 2CE2 */
3568 {0x2CE4, 0x2CE4, 0x2CE4}, {0x2CE5, 0x2CE5, 0x2CE5}, /* 2CE4 */
3569 {0x2CE6, 0x2CE6, 0x2CE6}, {0x2CE7, 0x2CE7, 0x2CE7}, /* 2CE6 */
3570 {0x2CE8, 0x2CE8, 0x2CE8}, {0x2CE9, 0x2CE9, 0x2CE9}, /* 2CE8 */
3571 {0x2CEA, 0x2CEA, 0x2CEA}, {0x2CEB, 0x2CEC, 0x2CEB}, /* 2CEA */
3572 {0x2CEB, 0x2CEC, 0x2CEB}, {0x2CED, 0x2CEE, 0x2CED}, /* 2CEC */
3573 {0x2CED, 0x2CEE, 0x2CED}, {0x2CEF, 0x2CEF, 0x2CEF}, /* 2CEE */
3574 {0x2CF0, 0x2CF0, 0x2CF0}, {0x2CF1, 0x2CF1, 0x2CF1}, /* 2CF0 */
3575 {0x2CF2, 0x2CF2, 0x2CF2}, {0x2CF3, 0x2CF3, 0x2CF3}, /* 2CF2 */
3576 {0x2CF4, 0x2CF4, 0x2CF4}, {0x2CF5, 0x2CF5, 0x2CF5}, /* 2CF4 */
3577 {0x2CF6, 0x2CF6, 0x2CF6}, {0x2CF7, 0x2CF7, 0x2CF7}, /* 2CF6 */
3578 {0x2CF8, 0x2CF8, 0x2CF8}, {0x2CF9, 0x2CF9, 0x2CF9}, /* 2CF8 */
3579 {0x2CFA, 0x2CFA, 0x2CFA}, {0x2CFB, 0x2CFB, 0x2CFB}, /* 2CFA */
3580 {0x2CFC, 0x2CFC, 0x2CFC}, {0x2CFD, 0x2CFD, 0x2CFD}, /* 2CFC */
3581 {0x2CFE, 0x2CFE, 0x2CFE}, {0x2CFF, 0x2CFF, 0x2CFF} /* 2CFE */
3582 };
3583
3584 static const MY_UNICASE_CHARACTER u520p2D[] = {
3585 {0x10A0, 0x2D00, 0x10A0}, {0x10A1, 0x2D01, 0x10A1}, /* 2D00 */
3586 {0x10A2, 0x2D02, 0x10A2}, {0x10A3, 0x2D03, 0x10A3}, /* 2D02 */
3587 {0x10A4, 0x2D04, 0x10A4}, {0x10A5, 0x2D05, 0x10A5}, /* 2D04 */
3588 {0x10A6, 0x2D06, 0x10A6}, {0x10A7, 0x2D07, 0x10A7}, /* 2D06 */
3589 {0x10A8, 0x2D08, 0x10A8}, {0x10A9, 0x2D09, 0x10A9}, /* 2D08 */
3590 {0x10AA, 0x2D0A, 0x10AA}, {0x10AB, 0x2D0B, 0x10AB}, /* 2D0A */
3591 {0x10AC, 0x2D0C, 0x10AC}, {0x10AD, 0x2D0D, 0x10AD}, /* 2D0C */
3592 {0x10AE, 0x2D0E, 0x10AE}, {0x10AF, 0x2D0F, 0x10AF}, /* 2D0E */
3593 {0x10B0, 0x2D10, 0x10B0}, {0x10B1, 0x2D11, 0x10B1}, /* 2D10 */
3594 {0x10B2, 0x2D12, 0x10B2}, {0x10B3, 0x2D13, 0x10B3}, /* 2D12 */
3595 {0x10B4, 0x2D14, 0x10B4}, {0x10B5, 0x2D15, 0x10B5}, /* 2D14 */
3596 {0x10B6, 0x2D16, 0x10B6}, {0x10B7, 0x2D17, 0x10B7}, /* 2D16 */
3597 {0x10B8, 0x2D18, 0x10B8}, {0x10B9, 0x2D19, 0x10B9}, /* 2D18 */
3598 {0x10BA, 0x2D1A, 0x10BA}, {0x10BB, 0x2D1B, 0x10BB}, /* 2D1A */
3599 {0x10BC, 0x2D1C, 0x10BC}, {0x10BD, 0x2D1D, 0x10BD}, /* 2D1C */
3600 {0x10BE, 0x2D1E, 0x10BE}, {0x10BF, 0x2D1F, 0x10BF}, /* 2D1E */
3601 {0x10C0, 0x2D20, 0x10C0}, {0x10C1, 0x2D21, 0x10C1}, /* 2D20 */
3602 {0x10C2, 0x2D22, 0x10C2}, {0x10C3, 0x2D23, 0x10C3}, /* 2D22 */
3603 {0x10C4, 0x2D24, 0x10C4}, {0x10C5, 0x2D25, 0x10C5}, /* 2D24 */
3604 {0x2D26, 0x2D26, 0x2D26}, {0x2D27, 0x2D27, 0x2D27}, /* 2D26 */
3605 {0x2D28, 0x2D28, 0x2D28}, {0x2D29, 0x2D29, 0x2D29}, /* 2D28 */
3606 {0x2D2A, 0x2D2A, 0x2D2A}, {0x2D2B, 0x2D2B, 0x2D2B}, /* 2D2A */
3607 {0x2D2C, 0x2D2C, 0x2D2C}, {0x2D2D, 0x2D2D, 0x2D2D}, /* 2D2C */
3608 {0x2D2E, 0x2D2E, 0x2D2E}, {0x2D2F, 0x2D2F, 0x2D2F}, /* 2D2E */
3609 {0x2D30, 0x2D30, 0x2D30}, {0x2D31, 0x2D31, 0x2D31}, /* 2D30 */
3610 {0x2D32, 0x2D32, 0x2D32}, {0x2D33, 0x2D33, 0x2D33}, /* 2D32 */
3611 {0x2D34, 0x2D34, 0x2D34}, {0x2D35, 0x2D35, 0x2D35}, /* 2D34 */
3612 {0x2D36, 0x2D36, 0x2D36}, {0x2D37, 0x2D37, 0x2D37}, /* 2D36 */
3613 {0x2D38, 0x2D38, 0x2D38}, {0x2D39, 0x2D39, 0x2D39}, /* 2D38 */
3614 {0x2D3A, 0x2D3A, 0x2D3A}, {0x2D3B, 0x2D3B, 0x2D3B}, /* 2D3A */
3615 {0x2D3C, 0x2D3C, 0x2D3C}, {0x2D3D, 0x2D3D, 0x2D3D}, /* 2D3C */
3616 {0x2D3E, 0x2D3E, 0x2D3E}, {0x2D3F, 0x2D3F, 0x2D3F}, /* 2D3E */
3617 {0x2D40, 0x2D40, 0x2D40}, {0x2D41, 0x2D41, 0x2D41}, /* 2D40 */
3618 {0x2D42, 0x2D42, 0x2D42}, {0x2D43, 0x2D43, 0x2D43}, /* 2D42 */
3619 {0x2D44, 0x2D44, 0x2D44}, {0x2D45, 0x2D45, 0x2D45}, /* 2D44 */
3620 {0x2D46, 0x2D46, 0x2D46}, {0x2D47, 0x2D47, 0x2D47}, /* 2D46 */
3621 {0x2D48, 0x2D48, 0x2D48}, {0x2D49, 0x2D49, 0x2D49}, /* 2D48 */
3622 {0x2D4A, 0x2D4A, 0x2D4A}, {0x2D4B, 0x2D4B, 0x2D4B}, /* 2D4A */
3623 {0x2D4C, 0x2D4C, 0x2D4C}, {0x2D4D, 0x2D4D, 0x2D4D}, /* 2D4C */
3624 {0x2D4E, 0x2D4E, 0x2D4E}, {0x2D4F, 0x2D4F, 0x2D4F}, /* 2D4E */
3625 {0x2D50, 0x2D50, 0x2D50}, {0x2D51, 0x2D51, 0x2D51}, /* 2D50 */
3626 {0x2D52, 0x2D52, 0x2D52}, {0x2D53, 0x2D53, 0x2D53}, /* 2D52 */
3627 {0x2D54, 0x2D54, 0x2D54}, {0x2D55, 0x2D55, 0x2D55}, /* 2D54 */
3628 {0x2D56, 0x2D56, 0x2D56}, {0x2D57, 0x2D57, 0x2D57}, /* 2D56 */
3629 {0x2D58, 0x2D58, 0x2D58}, {0x2D59, 0x2D59, 0x2D59}, /* 2D58 */
3630 {0x2D5A, 0x2D5A, 0x2D5A}, {0x2D5B, 0x2D5B, 0x2D5B}, /* 2D5A */
3631 {0x2D5C, 0x2D5C, 0x2D5C}, {0x2D5D, 0x2D5D, 0x2D5D}, /* 2D5C */
3632 {0x2D5E, 0x2D5E, 0x2D5E}, {0x2D5F, 0x2D5F, 0x2D5F}, /* 2D5E */
3633 {0x2D60, 0x2D60, 0x2D60}, {0x2D61, 0x2D61, 0x2D61}, /* 2D60 */
3634 {0x2D62, 0x2D62, 0x2D62}, {0x2D63, 0x2D63, 0x2D63}, /* 2D62 */
3635 {0x2D64, 0x2D64, 0x2D64}, {0x2D65, 0x2D65, 0x2D65}, /* 2D64 */
3636 {0x2D66, 0x2D66, 0x2D66}, {0x2D67, 0x2D67, 0x2D67}, /* 2D66 */
3637 {0x2D68, 0x2D68, 0x2D68}, {0x2D69, 0x2D69, 0x2D69}, /* 2D68 */
3638 {0x2D6A, 0x2D6A, 0x2D6A}, {0x2D6B, 0x2D6B, 0x2D6B}, /* 2D6A */
3639 {0x2D6C, 0x2D6C, 0x2D6C}, {0x2D6D, 0x2D6D, 0x2D6D}, /* 2D6C */
3640 {0x2D6E, 0x2D6E, 0x2D6E}, {0x2D6F, 0x2D6F, 0x2D6F}, /* 2D6E */
3641 {0x2D70, 0x2D70, 0x2D70}, {0x2D71, 0x2D71, 0x2D71}, /* 2D70 */
3642 {0x2D72, 0x2D72, 0x2D72}, {0x2D73, 0x2D73, 0x2D73}, /* 2D72 */
3643 {0x2D74, 0x2D74, 0x2D74}, {0x2D75, 0x2D75, 0x2D75}, /* 2D74 */
3644 {0x2D76, 0x2D76, 0x2D76}, {0x2D77, 0x2D77, 0x2D77}, /* 2D76 */
3645 {0x2D78, 0x2D78, 0x2D78}, {0x2D79, 0x2D79, 0x2D79}, /* 2D78 */
3646 {0x2D7A, 0x2D7A, 0x2D7A}, {0x2D7B, 0x2D7B, 0x2D7B}, /* 2D7A */
3647 {0x2D7C, 0x2D7C, 0x2D7C}, {0x2D7D, 0x2D7D, 0x2D7D}, /* 2D7C */
3648 {0x2D7E, 0x2D7E, 0x2D7E}, {0x2D7F, 0x2D7F, 0x2D7F}, /* 2D7E */
3649 {0x2D80, 0x2D80, 0x2D80}, {0x2D81, 0x2D81, 0x2D81}, /* 2D80 */
3650 {0x2D82, 0x2D82, 0x2D82}, {0x2D83, 0x2D83, 0x2D83}, /* 2D82 */
3651 {0x2D84, 0x2D84, 0x2D84}, {0x2D85, 0x2D85, 0x2D85}, /* 2D84 */
3652 {0x2D86, 0x2D86, 0x2D86}, {0x2D87, 0x2D87, 0x2D87}, /* 2D86 */
3653 {0x2D88, 0x2D88, 0x2D88}, {0x2D89, 0x2D89, 0x2D89}, /* 2D88 */
3654 {0x2D8A, 0x2D8A, 0x2D8A}, {0x2D8B, 0x2D8B, 0x2D8B}, /* 2D8A */
3655 {0x2D8C, 0x2D8C, 0x2D8C}, {0x2D8D, 0x2D8D, 0x2D8D}, /* 2D8C */
3656 {0x2D8E, 0x2D8E, 0x2D8E}, {0x2D8F, 0x2D8F, 0x2D8F}, /* 2D8E */
3657 {0x2D90, 0x2D90, 0x2D90}, {0x2D91, 0x2D91, 0x2D91}, /* 2D90 */
3658 {0x2D92, 0x2D92, 0x2D92}, {0x2D93, 0x2D93, 0x2D93}, /* 2D92 */
3659 {0x2D94, 0x2D94, 0x2D94}, {0x2D95, 0x2D95, 0x2D95}, /* 2D94 */
3660 {0x2D96, 0x2D96, 0x2D96}, {0x2D97, 0x2D97, 0x2D97}, /* 2D96 */
3661 {0x2D98, 0x2D98, 0x2D98}, {0x2D99, 0x2D99, 0x2D99}, /* 2D98 */
3662 {0x2D9A, 0x2D9A, 0x2D9A}, {0x2D9B, 0x2D9B, 0x2D9B}, /* 2D9A */
3663 {0x2D9C, 0x2D9C, 0x2D9C}, {0x2D9D, 0x2D9D, 0x2D9D}, /* 2D9C */
3664 {0x2D9E, 0x2D9E, 0x2D9E}, {0x2D9F, 0x2D9F, 0x2D9F}, /* 2D9E */
3665 {0x2DA0, 0x2DA0, 0x2DA0}, {0x2DA1, 0x2DA1, 0x2DA1}, /* 2DA0 */
3666 {0x2DA2, 0x2DA2, 0x2DA2}, {0x2DA3, 0x2DA3, 0x2DA3}, /* 2DA2 */
3667 {0x2DA4, 0x2DA4, 0x2DA4}, {0x2DA5, 0x2DA5, 0x2DA5}, /* 2DA4 */
3668 {0x2DA6, 0x2DA6, 0x2DA6}, {0x2DA7, 0x2DA7, 0x2DA7}, /* 2DA6 */
3669 {0x2DA8, 0x2DA8, 0x2DA8}, {0x2DA9, 0x2DA9, 0x2DA9}, /* 2DA8 */
3670 {0x2DAA, 0x2DAA, 0x2DAA}, {0x2DAB, 0x2DAB, 0x2DAB}, /* 2DAA */
3671 {0x2DAC, 0x2DAC, 0x2DAC}, {0x2DAD, 0x2DAD, 0x2DAD}, /* 2DAC */
3672 {0x2DAE, 0x2DAE, 0x2DAE}, {0x2DAF, 0x2DAF, 0x2DAF}, /* 2DAE */
3673 {0x2DB0, 0x2DB0, 0x2DB0}, {0x2DB1, 0x2DB1, 0x2DB1}, /* 2DB0 */
3674 {0x2DB2, 0x2DB2, 0x2DB2}, {0x2DB3, 0x2DB3, 0x2DB3}, /* 2DB2 */
3675 {0x2DB4, 0x2DB4, 0x2DB4}, {0x2DB5, 0x2DB5, 0x2DB5}, /* 2DB4 */
3676 {0x2DB6, 0x2DB6, 0x2DB6}, {0x2DB7, 0x2DB7, 0x2DB7}, /* 2DB6 */
3677 {0x2DB8, 0x2DB8, 0x2DB8}, {0x2DB9, 0x2DB9, 0x2DB9}, /* 2DB8 */
3678 {0x2DBA, 0x2DBA, 0x2DBA}, {0x2DBB, 0x2DBB, 0x2DBB}, /* 2DBA */
3679 {0x2DBC, 0x2DBC, 0x2DBC}, {0x2DBD, 0x2DBD, 0x2DBD}, /* 2DBC */
3680 {0x2DBE, 0x2DBE, 0x2DBE}, {0x2DBF, 0x2DBF, 0x2DBF}, /* 2DBE */
3681 {0x2DC0, 0x2DC0, 0x2DC0}, {0x2DC1, 0x2DC1, 0x2DC1}, /* 2DC0 */
3682 {0x2DC2, 0x2DC2, 0x2DC2}, {0x2DC3, 0x2DC3, 0x2DC3}, /* 2DC2 */
3683 {0x2DC4, 0x2DC4, 0x2DC4}, {0x2DC5, 0x2DC5, 0x2DC5}, /* 2DC4 */
3684 {0x2DC6, 0x2DC6, 0x2DC6}, {0x2DC7, 0x2DC7, 0x2DC7}, /* 2DC6 */
3685 {0x2DC8, 0x2DC8, 0x2DC8}, {0x2DC9, 0x2DC9, 0x2DC9}, /* 2DC8 */
3686 {0x2DCA, 0x2DCA, 0x2DCA}, {0x2DCB, 0x2DCB, 0x2DCB}, /* 2DCA */
3687 {0x2DCC, 0x2DCC, 0x2DCC}, {0x2DCD, 0x2DCD, 0x2DCD}, /* 2DCC */
3688 {0x2DCE, 0x2DCE, 0x2DCE}, {0x2DCF, 0x2DCF, 0x2DCF}, /* 2DCE */
3689 {0x2DD0, 0x2DD0, 0x2DD0}, {0x2DD1, 0x2DD1, 0x2DD1}, /* 2DD0 */
3690 {0x2DD2, 0x2DD2, 0x2DD2}, {0x2DD3, 0x2DD3, 0x2DD3}, /* 2DD2 */
3691 {0x2DD4, 0x2DD4, 0x2DD4}, {0x2DD5, 0x2DD5, 0x2DD5}, /* 2DD4 */
3692 {0x2DD6, 0x2DD6, 0x2DD6}, {0x2DD7, 0x2DD7, 0x2DD7}, /* 2DD6 */
3693 {0x2DD8, 0x2DD8, 0x2DD8}, {0x2DD9, 0x2DD9, 0x2DD9}, /* 2DD8 */
3694 {0x2DDA, 0x2DDA, 0x2DDA}, {0x2DDB, 0x2DDB, 0x2DDB}, /* 2DDA */
3695 {0x2DDC, 0x2DDC, 0x2DDC}, {0x2DDD, 0x2DDD, 0x2DDD}, /* 2DDC */
3696 {0x2DDE, 0x2DDE, 0x2DDE}, {0x2DDF, 0x2DDF, 0x2DDF}, /* 2DDE */
3697 {0x2DE0, 0x2DE0, 0x2DE0}, {0x2DE1, 0x2DE1, 0x2DE1}, /* 2DE0 */
3698 {0x2DE2, 0x2DE2, 0x2DE2}, {0x2DE3, 0x2DE3, 0x2DE3}, /* 2DE2 */
3699 {0x2DE4, 0x2DE4, 0x2DE4}, {0x2DE5, 0x2DE5, 0x2DE5}, /* 2DE4 */
3700 {0x2DE6, 0x2DE6, 0x2DE6}, {0x2DE7, 0x2DE7, 0x2DE7}, /* 2DE6 */
3701 {0x2DE8, 0x2DE8, 0x2DE8}, {0x2DE9, 0x2DE9, 0x2DE9}, /* 2DE8 */
3702 {0x2DEA, 0x2DEA, 0x2DEA}, {0x2DEB, 0x2DEB, 0x2DEB}, /* 2DEA */
3703 {0x2DEC, 0x2DEC, 0x2DEC}, {0x2DED, 0x2DED, 0x2DED}, /* 2DEC */
3704 {0x2DEE, 0x2DEE, 0x2DEE}, {0x2DEF, 0x2DEF, 0x2DEF}, /* 2DEE */
3705 {0x2DF0, 0x2DF0, 0x2DF0}, {0x2DF1, 0x2DF1, 0x2DF1}, /* 2DF0 */
3706 {0x2DF2, 0x2DF2, 0x2DF2}, {0x2DF3, 0x2DF3, 0x2DF3}, /* 2DF2 */
3707 {0x2DF4, 0x2DF4, 0x2DF4}, {0x2DF5, 0x2DF5, 0x2DF5}, /* 2DF4 */
3708 {0x2DF6, 0x2DF6, 0x2DF6}, {0x2DF7, 0x2DF7, 0x2DF7}, /* 2DF6 */
3709 {0x2DF8, 0x2DF8, 0x2DF8}, {0x2DF9, 0x2DF9, 0x2DF9}, /* 2DF8 */
3710 {0x2DFA, 0x2DFA, 0x2DFA}, {0x2DFB, 0x2DFB, 0x2DFB}, /* 2DFA */
3711 {0x2DFC, 0x2DFC, 0x2DFC}, {0x2DFD, 0x2DFD, 0x2DFD}, /* 2DFC */
3712 {0x2DFE, 0x2DFE, 0x2DFE}, {0x2DFF, 0x2DFF, 0x2DFF} /* 2DFE */
3713 };
3714
3715 static const MY_UNICASE_CHARACTER u520pA6[] = {
3716 {0xA600, 0xA600, 0xA600}, {0xA601, 0xA601, 0xA601}, /* A600 */
3717 {0xA602, 0xA602, 0xA602}, {0xA603, 0xA603, 0xA603}, /* A602 */
3718 {0xA604, 0xA604, 0xA604}, {0xA605, 0xA605, 0xA605}, /* A604 */
3719 {0xA606, 0xA606, 0xA606}, {0xA607, 0xA607, 0xA607}, /* A606 */
3720 {0xA608, 0xA608, 0xA608}, {0xA609, 0xA609, 0xA609}, /* A608 */
3721 {0xA60A, 0xA60A, 0xA60A}, {0xA60B, 0xA60B, 0xA60B}, /* A60A */
3722 {0xA60C, 0xA60C, 0xA60C}, {0xA60D, 0xA60D, 0xA60D}, /* A60C */
3723 {0xA60E, 0xA60E, 0xA60E}, {0xA60F, 0xA60F, 0xA60F}, /* A60E */
3724 {0xA610, 0xA610, 0xA610}, {0xA611, 0xA611, 0xA611}, /* A610 */
3725 {0xA612, 0xA612, 0xA612}, {0xA613, 0xA613, 0xA613}, /* A612 */
3726 {0xA614, 0xA614, 0xA614}, {0xA615, 0xA615, 0xA615}, /* A614 */
3727 {0xA616, 0xA616, 0xA616}, {0xA617, 0xA617, 0xA617}, /* A616 */
3728 {0xA618, 0xA618, 0xA618}, {0xA619, 0xA619, 0xA619}, /* A618 */
3729 {0xA61A, 0xA61A, 0xA61A}, {0xA61B, 0xA61B, 0xA61B}, /* A61A */
3730 {0xA61C, 0xA61C, 0xA61C}, {0xA61D, 0xA61D, 0xA61D}, /* A61C */
3731 {0xA61E, 0xA61E, 0xA61E}, {0xA61F, 0xA61F, 0xA61F}, /* A61E */
3732 {0xA620, 0xA620, 0xA620}, {0xA621, 0xA621, 0xA621}, /* A620 */
3733 {0xA622, 0xA622, 0xA622}, {0xA623, 0xA623, 0xA623}, /* A622 */
3734 {0xA624, 0xA624, 0xA624}, {0xA625, 0xA625, 0xA625}, /* A624 */
3735 {0xA626, 0xA626, 0xA626}, {0xA627, 0xA627, 0xA627}, /* A626 */
3736 {0xA628, 0xA628, 0xA628}, {0xA629, 0xA629, 0xA629}, /* A628 */
3737 {0xA62A, 0xA62A, 0xA62A}, {0xA62B, 0xA62B, 0xA62B}, /* A62A */
3738 {0xA62C, 0xA62C, 0xA62C}, {0xA62D, 0xA62D, 0xA62D}, /* A62C */
3739 {0xA62E, 0xA62E, 0xA62E}, {0xA62F, 0xA62F, 0xA62F}, /* A62E */
3740 {0xA630, 0xA630, 0xA630}, {0xA631, 0xA631, 0xA631}, /* A630 */
3741 {0xA632, 0xA632, 0xA632}, {0xA633, 0xA633, 0xA633}, /* A632 */
3742 {0xA634, 0xA634, 0xA634}, {0xA635, 0xA635, 0xA635}, /* A634 */
3743 {0xA636, 0xA636, 0xA636}, {0xA637, 0xA637, 0xA637}, /* A636 */
3744 {0xA638, 0xA638, 0xA638}, {0xA639, 0xA639, 0xA639}, /* A638 */
3745 {0xA63A, 0xA63A, 0xA63A}, {0xA63B, 0xA63B, 0xA63B}, /* A63A */
3746 {0xA63C, 0xA63C, 0xA63C}, {0xA63D, 0xA63D, 0xA63D}, /* A63C */
3747 {0xA63E, 0xA63E, 0xA63E}, {0xA63F, 0xA63F, 0xA63F}, /* A63E */
3748 {0xA640, 0xA641, 0xA640}, {0xA640, 0xA641, 0xA640}, /* A640 */
3749 {0xA642, 0xA643, 0xA642}, {0xA642, 0xA643, 0xA642}, /* A642 */
3750 {0xA644, 0xA645, 0xA644}, {0xA644, 0xA645, 0xA644}, /* A644 */
3751 {0xA646, 0xA647, 0xA646}, {0xA646, 0xA647, 0xA646}, /* A646 */
3752 {0xA648, 0xA649, 0xA648}, {0xA648, 0xA649, 0xA648}, /* A648 */
3753 {0xA64A, 0xA64B, 0xA64A}, {0xA64A, 0xA64B, 0xA64A}, /* A64A */
3754 {0xA64C, 0xA64D, 0xA64C}, {0xA64C, 0xA64D, 0xA64C}, /* A64C */
3755 {0xA64E, 0xA64F, 0xA64E}, {0xA64E, 0xA64F, 0xA64E}, /* A64E */
3756 {0xA650, 0xA651, 0xA650}, {0xA650, 0xA651, 0xA650}, /* A650 */
3757 {0xA652, 0xA653, 0xA652}, {0xA652, 0xA653, 0xA652}, /* A652 */
3758 {0xA654, 0xA655, 0xA654}, {0xA654, 0xA655, 0xA654}, /* A654 */
3759 {0xA656, 0xA657, 0xA656}, {0xA656, 0xA657, 0xA656}, /* A656 */
3760 {0xA658, 0xA659, 0xA658}, {0xA658, 0xA659, 0xA658}, /* A658 */
3761 {0xA65A, 0xA65B, 0xA65A}, {0xA65A, 0xA65B, 0xA65A}, /* A65A */
3762 {0xA65C, 0xA65D, 0xA65C}, {0xA65C, 0xA65D, 0xA65C}, /* A65C */
3763 {0xA65E, 0xA65F, 0xA65E}, {0xA65E, 0xA65F, 0xA65E}, /* A65E */
3764 {0xA660, 0xA660, 0xA660}, {0xA661, 0xA661, 0xA661}, /* A660 */
3765 {0xA662, 0xA663, 0xA662}, {0xA662, 0xA663, 0xA662}, /* A662 */
3766 {0xA664, 0xA665, 0xA664}, {0xA664, 0xA665, 0xA664}, /* A664 */
3767 {0xA666, 0xA667, 0xA666}, {0xA666, 0xA667, 0xA666}, /* A666 */
3768 {0xA668, 0xA669, 0xA668}, {0xA668, 0xA669, 0xA668}, /* A668 */
3769 {0xA66A, 0xA66B, 0xA66A}, {0xA66A, 0xA66B, 0xA66A}, /* A66A */
3770 {0xA66C, 0xA66D, 0xA66C}, {0xA66C, 0xA66D, 0xA66C}, /* A66C */
3771 {0xA66E, 0xA66E, 0xA66E}, {0xA66F, 0xA66F, 0xA66F}, /* A66E */
3772 {0xA670, 0xA670, 0xA670}, {0xA671, 0xA671, 0xA671}, /* A670 */
3773 {0xA672, 0xA672, 0xA672}, {0xA673, 0xA673, 0xA673}, /* A672 */
3774 {0xA674, 0xA674, 0xA674}, {0xA675, 0xA675, 0xA675}, /* A674 */
3775 {0xA676, 0xA676, 0xA676}, {0xA677, 0xA677, 0xA677}, /* A676 */
3776 {0xA678, 0xA678, 0xA678}, {0xA679, 0xA679, 0xA679}, /* A678 */
3777 {0xA67A, 0xA67A, 0xA67A}, {0xA67B, 0xA67B, 0xA67B}, /* A67A */
3778 {0xA67C, 0xA67C, 0xA67C}, {0xA67D, 0xA67D, 0xA67D}, /* A67C */
3779 {0xA67E, 0xA67E, 0xA67E}, {0xA67F, 0xA67F, 0xA67F}, /* A67E */
3780 {0xA680, 0xA681, 0xA680}, {0xA680, 0xA681, 0xA680}, /* A680 */
3781 {0xA682, 0xA683, 0xA682}, {0xA682, 0xA683, 0xA682}, /* A682 */
3782 {0xA684, 0xA685, 0xA684}, {0xA684, 0xA685, 0xA684}, /* A684 */
3783 {0xA686, 0xA687, 0xA686}, {0xA686, 0xA687, 0xA686}, /* A686 */
3784 {0xA688, 0xA689, 0xA688}, {0xA688, 0xA689, 0xA688}, /* A688 */
3785 {0xA68A, 0xA68B, 0xA68A}, {0xA68A, 0xA68B, 0xA68A}, /* A68A */
3786 {0xA68C, 0xA68D, 0xA68C}, {0xA68C, 0xA68D, 0xA68C}, /* A68C */
3787 {0xA68E, 0xA68F, 0xA68E}, {0xA68E, 0xA68F, 0xA68E}, /* A68E */
3788 {0xA690, 0xA691, 0xA690}, {0xA690, 0xA691, 0xA690}, /* A690 */
3789 {0xA692, 0xA693, 0xA692}, {0xA692, 0xA693, 0xA692}, /* A692 */
3790 {0xA694, 0xA695, 0xA694}, {0xA694, 0xA695, 0xA694}, /* A694 */
3791 {0xA696, 0xA697, 0xA696}, {0xA696, 0xA697, 0xA696}, /* A696 */
3792 {0xA698, 0xA698, 0xA698}, {0xA699, 0xA699, 0xA699}, /* A698 */
3793 {0xA69A, 0xA69A, 0xA69A}, {0xA69B, 0xA69B, 0xA69B}, /* A69A */
3794 {0xA69C, 0xA69C, 0xA69C}, {0xA69D, 0xA69D, 0xA69D}, /* A69C */
3795 {0xA69E, 0xA69E, 0xA69E}, {0xA69F, 0xA69F, 0xA69F}, /* A69E */
3796 {0xA6A0, 0xA6A0, 0xA6A0}, {0xA6A1, 0xA6A1, 0xA6A1}, /* A6A0 */
3797 {0xA6A2, 0xA6A2, 0xA6A2}, {0xA6A3, 0xA6A3, 0xA6A3}, /* A6A2 */
3798 {0xA6A4, 0xA6A4, 0xA6A4}, {0xA6A5, 0xA6A5, 0xA6A5}, /* A6A4 */
3799 {0xA6A6, 0xA6A6, 0xA6A6}, {0xA6A7, 0xA6A7, 0xA6A7}, /* A6A6 */
3800 {0xA6A8, 0xA6A8, 0xA6A8}, {0xA6A9, 0xA6A9, 0xA6A9}, /* A6A8 */
3801 {0xA6AA, 0xA6AA, 0xA6AA}, {0xA6AB, 0xA6AB, 0xA6AB}, /* A6AA */
3802 {0xA6AC, 0xA6AC, 0xA6AC}, {0xA6AD, 0xA6AD, 0xA6AD}, /* A6AC */
3803 {0xA6AE, 0xA6AE, 0xA6AE}, {0xA6AF, 0xA6AF, 0xA6AF}, /* A6AE */
3804 {0xA6B0, 0xA6B0, 0xA6B0}, {0xA6B1, 0xA6B1, 0xA6B1}, /* A6B0 */
3805 {0xA6B2, 0xA6B2, 0xA6B2}, {0xA6B3, 0xA6B3, 0xA6B3}, /* A6B2 */
3806 {0xA6B4, 0xA6B4, 0xA6B4}, {0xA6B5, 0xA6B5, 0xA6B5}, /* A6B4 */
3807 {0xA6B6, 0xA6B6, 0xA6B6}, {0xA6B7, 0xA6B7, 0xA6B7}, /* A6B6 */
3808 {0xA6B8, 0xA6B8, 0xA6B8}, {0xA6B9, 0xA6B9, 0xA6B9}, /* A6B8 */
3809 {0xA6BA, 0xA6BA, 0xA6BA}, {0xA6BB, 0xA6BB, 0xA6BB}, /* A6BA */
3810 {0xA6BC, 0xA6BC, 0xA6BC}, {0xA6BD, 0xA6BD, 0xA6BD}, /* A6BC */
3811 {0xA6BE, 0xA6BE, 0xA6BE}, {0xA6BF, 0xA6BF, 0xA6BF}, /* A6BE */
3812 {0xA6C0, 0xA6C0, 0xA6C0}, {0xA6C1, 0xA6C1, 0xA6C1}, /* A6C0 */
3813 {0xA6C2, 0xA6C2, 0xA6C2}, {0xA6C3, 0xA6C3, 0xA6C3}, /* A6C2 */
3814 {0xA6C4, 0xA6C4, 0xA6C4}, {0xA6C5, 0xA6C5, 0xA6C5}, /* A6C4 */
3815 {0xA6C6, 0xA6C6, 0xA6C6}, {0xA6C7, 0xA6C7, 0xA6C7}, /* A6C6 */
3816 {0xA6C8, 0xA6C8, 0xA6C8}, {0xA6C9, 0xA6C9, 0xA6C9}, /* A6C8 */
3817 {0xA6CA, 0xA6CA, 0xA6CA}, {0xA6CB, 0xA6CB, 0xA6CB}, /* A6CA */
3818 {0xA6CC, 0xA6CC, 0xA6CC}, {0xA6CD, 0xA6CD, 0xA6CD}, /* A6CC */
3819 {0xA6CE, 0xA6CE, 0xA6CE}, {0xA6CF, 0xA6CF, 0xA6CF}, /* A6CE */
3820 {0xA6D0, 0xA6D0, 0xA6D0}, {0xA6D1, 0xA6D1, 0xA6D1}, /* A6D0 */
3821 {0xA6D2, 0xA6D2, 0xA6D2}, {0xA6D3, 0xA6D3, 0xA6D3}, /* A6D2 */
3822 {0xA6D4, 0xA6D4, 0xA6D4}, {0xA6D5, 0xA6D5, 0xA6D5}, /* A6D4 */
3823 {0xA6D6, 0xA6D6, 0xA6D6}, {0xA6D7, 0xA6D7, 0xA6D7}, /* A6D6 */
3824 {0xA6D8, 0xA6D8, 0xA6D8}, {0xA6D9, 0xA6D9, 0xA6D9}, /* A6D8 */
3825 {0xA6DA, 0xA6DA, 0xA6DA}, {0xA6DB, 0xA6DB, 0xA6DB}, /* A6DA */
3826 {0xA6DC, 0xA6DC, 0xA6DC}, {0xA6DD, 0xA6DD, 0xA6DD}, /* A6DC */
3827 {0xA6DE, 0xA6DE, 0xA6DE}, {0xA6DF, 0xA6DF, 0xA6DF}, /* A6DE */
3828 {0xA6E0, 0xA6E0, 0xA6E0}, {0xA6E1, 0xA6E1, 0xA6E1}, /* A6E0 */
3829 {0xA6E2, 0xA6E2, 0xA6E2}, {0xA6E3, 0xA6E3, 0xA6E3}, /* A6E2 */
3830 {0xA6E4, 0xA6E4, 0xA6E4}, {0xA6E5, 0xA6E5, 0xA6E5}, /* A6E4 */
3831 {0xA6E6, 0xA6E6, 0xA6E6}, {0xA6E7, 0xA6E7, 0xA6E7}, /* A6E6 */
3832 {0xA6E8, 0xA6E8, 0xA6E8}, {0xA6E9, 0xA6E9, 0xA6E9}, /* A6E8 */
3833 {0xA6EA, 0xA6EA, 0xA6EA}, {0xA6EB, 0xA6EB, 0xA6EB}, /* A6EA */
3834 {0xA6EC, 0xA6EC, 0xA6EC}, {0xA6ED, 0xA6ED, 0xA6ED}, /* A6EC */
3835 {0xA6EE, 0xA6EE, 0xA6EE}, {0xA6EF, 0xA6EF, 0xA6EF}, /* A6EE */
3836 {0xA6F0, 0xA6F0, 0xA6F0}, {0xA6F1, 0xA6F1, 0xA6F1}, /* A6F0 */
3837 {0xA6F2, 0xA6F2, 0xA6F2}, {0xA6F3, 0xA6F3, 0xA6F3}, /* A6F2 */
3838 {0xA6F4, 0xA6F4, 0xA6F4}, {0xA6F5, 0xA6F5, 0xA6F5}, /* A6F4 */
3839 {0xA6F6, 0xA6F6, 0xA6F6}, {0xA6F7, 0xA6F7, 0xA6F7}, /* A6F6 */
3840 {0xA6F8, 0xA6F8, 0xA6F8}, {0xA6F9, 0xA6F9, 0xA6F9}, /* A6F8 */
3841 {0xA6FA, 0xA6FA, 0xA6FA}, {0xA6FB, 0xA6FB, 0xA6FB}, /* A6FA */
3842 {0xA6FC, 0xA6FC, 0xA6FC}, {0xA6FD, 0xA6FD, 0xA6FD}, /* A6FC */
3843 {0xA6FE, 0xA6FE, 0xA6FE}, {0xA6FF, 0xA6FF, 0xA6FF} /* A6FE */
3844 };
3845
3846 static const MY_UNICASE_CHARACTER u520pA7[] = {
3847 {0xA700, 0xA700, 0xA700}, {0xA701, 0xA701, 0xA701}, /* A700 */
3848 {0xA702, 0xA702, 0xA702}, {0xA703, 0xA703, 0xA703}, /* A702 */
3849 {0xA704, 0xA704, 0xA704}, {0xA705, 0xA705, 0xA705}, /* A704 */
3850 {0xA706, 0xA706, 0xA706}, {0xA707, 0xA707, 0xA707}, /* A706 */
3851 {0xA708, 0xA708, 0xA708}, {0xA709, 0xA709, 0xA709}, /* A708 */
3852 {0xA70A, 0xA70A, 0xA70A}, {0xA70B, 0xA70B, 0xA70B}, /* A70A */
3853 {0xA70C, 0xA70C, 0xA70C}, {0xA70D, 0xA70D, 0xA70D}, /* A70C */
3854 {0xA70E, 0xA70E, 0xA70E}, {0xA70F, 0xA70F, 0xA70F}, /* A70E */
3855 {0xA710, 0xA710, 0xA710}, {0xA711, 0xA711, 0xA711}, /* A710 */
3856 {0xA712, 0xA712, 0xA712}, {0xA713, 0xA713, 0xA713}, /* A712 */
3857 {0xA714, 0xA714, 0xA714}, {0xA715, 0xA715, 0xA715}, /* A714 */
3858 {0xA716, 0xA716, 0xA716}, {0xA717, 0xA717, 0xA717}, /* A716 */
3859 {0xA718, 0xA718, 0xA718}, {0xA719, 0xA719, 0xA719}, /* A718 */
3860 {0xA71A, 0xA71A, 0xA71A}, {0xA71B, 0xA71B, 0xA71B}, /* A71A */
3861 {0xA71C, 0xA71C, 0xA71C}, {0xA71D, 0xA71D, 0xA71D}, /* A71C */
3862 {0xA71E, 0xA71E, 0xA71E}, {0xA71F, 0xA71F, 0xA71F}, /* A71E */
3863 {0xA720, 0xA720, 0xA720}, {0xA721, 0xA721, 0xA721}, /* A720 */
3864 {0xA722, 0xA723, 0xA722}, {0xA722, 0xA723, 0xA722}, /* A722 */
3865 {0xA724, 0xA725, 0xA724}, {0xA724, 0xA725, 0xA724}, /* A724 */
3866 {0xA726, 0xA727, 0xA726}, {0xA726, 0xA727, 0xA726}, /* A726 */
3867 {0xA728, 0xA729, 0xA728}, {0xA728, 0xA729, 0xA728}, /* A728 */
3868 {0xA72A, 0xA72B, 0xA72A}, {0xA72A, 0xA72B, 0xA72A}, /* A72A */
3869 {0xA72C, 0xA72D, 0xA72C}, {0xA72C, 0xA72D, 0xA72C}, /* A72C */
3870 {0xA72E, 0xA72F, 0xA72E}, {0xA72E, 0xA72F, 0xA72E}, /* A72E */
3871 {0xA730, 0xA730, 0xA730}, {0xA731, 0xA731, 0xA731}, /* A730 */
3872 {0xA732, 0xA733, 0xA732}, {0xA732, 0xA733, 0xA732}, /* A732 */
3873 {0xA734, 0xA735, 0xA734}, {0xA734, 0xA735, 0xA734}, /* A734 */
3874 {0xA736, 0xA737, 0xA736}, {0xA736, 0xA737, 0xA736}, /* A736 */
3875 {0xA738, 0xA739, 0xA738}, {0xA738, 0xA739, 0xA738}, /* A738 */
3876 {0xA73A, 0xA73B, 0xA73A}, {0xA73A, 0xA73B, 0xA73A}, /* A73A */
3877 {0xA73C, 0xA73D, 0xA73C}, {0xA73C, 0xA73D, 0xA73C}, /* A73C */
3878 {0xA73E, 0xA73F, 0xA73E}, {0xA73E, 0xA73F, 0xA73E}, /* A73E */
3879 {0xA740, 0xA741, 0xA740}, {0xA740, 0xA741, 0xA740}, /* A740 */
3880 {0xA742, 0xA743, 0xA742}, {0xA742, 0xA743, 0xA742}, /* A742 */
3881 {0xA744, 0xA745, 0xA744}, {0xA744, 0xA745, 0xA744}, /* A744 */
3882 {0xA746, 0xA747, 0xA746}, {0xA746, 0xA747, 0xA746}, /* A746 */
3883 {0xA748, 0xA749, 0xA748}, {0xA748, 0xA749, 0xA748}, /* A748 */
3884 {0xA74A, 0xA74B, 0xA74A}, {0xA74A, 0xA74B, 0xA74A}, /* A74A */
3885 {0xA74C, 0xA74D, 0xA74C}, {0xA74C, 0xA74D, 0xA74C}, /* A74C */
3886 {0xA74E, 0xA74F, 0xA74E}, {0xA74E, 0xA74F, 0xA74E}, /* A74E */
3887 {0xA750, 0xA751, 0xA750}, {0xA750, 0xA751, 0xA750}, /* A750 */
3888 {0xA752, 0xA753, 0xA752}, {0xA752, 0xA753, 0xA752}, /* A752 */
3889 {0xA754, 0xA755, 0xA754}, {0xA754, 0xA755, 0xA754}, /* A754 */
3890 {0xA756, 0xA757, 0xA756}, {0xA756, 0xA757, 0xA756}, /* A756 */
3891 {0xA758, 0xA759, 0xA758}, {0xA758, 0xA759, 0xA758}, /* A758 */
3892 {0xA75A, 0xA75B, 0xA75A}, {0xA75A, 0xA75B, 0xA75A}, /* A75A */
3893 {0xA75C, 0xA75D, 0xA75C}, {0xA75C, 0xA75D, 0xA75C}, /* A75C */
3894 {0xA75E, 0xA75F, 0xA75E}, {0xA75E, 0xA75F, 0xA75E}, /* A75E */
3895 {0xA760, 0xA761, 0xA760}, {0xA760, 0xA761, 0xA760}, /* A760 */
3896 {0xA762, 0xA763, 0xA762}, {0xA762, 0xA763, 0xA762}, /* A762 */
3897 {0xA764, 0xA765, 0xA764}, {0xA764, 0xA765, 0xA764}, /* A764 */
3898 {0xA766, 0xA767, 0xA766}, {0xA766, 0xA767, 0xA766}, /* A766 */
3899 {0xA768, 0xA769, 0xA768}, {0xA768, 0xA769, 0xA768}, /* A768 */
3900 {0xA76A, 0xA76B, 0xA76A}, {0xA76A, 0xA76B, 0xA76A}, /* A76A */
3901 {0xA76C, 0xA76D, 0xA76C}, {0xA76C, 0xA76D, 0xA76C}, /* A76C */
3902 {0xA76E, 0xA76F, 0xA76E}, {0xA76E, 0xA76F, 0xA76E}, /* A76E */
3903 {0xA770, 0xA770, 0xA770}, {0xA771, 0xA771, 0xA771}, /* A770 */
3904 {0xA772, 0xA772, 0xA772}, {0xA773, 0xA773, 0xA773}, /* A772 */
3905 {0xA774, 0xA774, 0xA774}, {0xA775, 0xA775, 0xA775}, /* A774 */
3906 {0xA776, 0xA776, 0xA776}, {0xA777, 0xA777, 0xA777}, /* A776 */
3907 {0xA778, 0xA778, 0xA778}, {0xA779, 0xA77A, 0xA779}, /* A778 */
3908 {0xA779, 0xA77A, 0xA779}, {0xA77B, 0xA77C, 0xA77B}, /* A77A */
3909 {0xA77B, 0xA77C, 0xA77B}, {0xA77D, 0x1D79, 0xA77D}, /* A77C */
3910 {0xA77E, 0xA77F, 0xA77E}, {0xA77E, 0xA77F, 0xA77E}, /* A77E */
3911 {0xA780, 0xA781, 0xA780}, {0xA780, 0xA781, 0xA780}, /* A780 */
3912 {0xA782, 0xA783, 0xA782}, {0xA782, 0xA783, 0xA782}, /* A782 */
3913 {0xA784, 0xA785, 0xA784}, {0xA784, 0xA785, 0xA784}, /* A784 */
3914 {0xA786, 0xA787, 0xA786}, {0xA786, 0xA787, 0xA786}, /* A786 */
3915 {0xA788, 0xA788, 0xA788}, {0xA789, 0xA789, 0xA789}, /* A788 */
3916 {0xA78A, 0xA78A, 0xA78A}, {0xA78B, 0xA78C, 0xA78B}, /* A78A */
3917 {0xA78B, 0xA78C, 0xA78B}, {0xA78D, 0xA78D, 0xA78D}, /* A78C */
3918 {0xA78E, 0xA78E, 0xA78E}, {0xA78F, 0xA78F, 0xA78F}, /* A78E */
3919 {0xA790, 0xA790, 0xA790}, {0xA791, 0xA791, 0xA791}, /* A790 */
3920 {0xA792, 0xA792, 0xA792}, {0xA793, 0xA793, 0xA793}, /* A792 */
3921 {0xA794, 0xA794, 0xA794}, {0xA795, 0xA795, 0xA795}, /* A794 */
3922 {0xA796, 0xA796, 0xA796}, {0xA797, 0xA797, 0xA797}, /* A796 */
3923 {0xA798, 0xA798, 0xA798}, {0xA799, 0xA799, 0xA799}, /* A798 */
3924 {0xA79A, 0xA79A, 0xA79A}, {0xA79B, 0xA79B, 0xA79B}, /* A79A */
3925 {0xA79C, 0xA79C, 0xA79C}, {0xA79D, 0xA79D, 0xA79D}, /* A79C */
3926 {0xA79E, 0xA79E, 0xA79E}, {0xA79F, 0xA79F, 0xA79F}, /* A79E */
3927 {0xA7A0, 0xA7A0, 0xA7A0}, {0xA7A1, 0xA7A1, 0xA7A1}, /* A7A0 */
3928 {0xA7A2, 0xA7A2, 0xA7A2}, {0xA7A3, 0xA7A3, 0xA7A3}, /* A7A2 */
3929 {0xA7A4, 0xA7A4, 0xA7A4}, {0xA7A5, 0xA7A5, 0xA7A5}, /* A7A4 */
3930 {0xA7A6, 0xA7A6, 0xA7A6}, {0xA7A7, 0xA7A7, 0xA7A7}, /* A7A6 */
3931 {0xA7A8, 0xA7A8, 0xA7A8}, {0xA7A9, 0xA7A9, 0xA7A9}, /* A7A8 */
3932 {0xA7AA, 0xA7AA, 0xA7AA}, {0xA7AB, 0xA7AB, 0xA7AB}, /* A7AA */
3933 {0xA7AC, 0xA7AC, 0xA7AC}, {0xA7AD, 0xA7AD, 0xA7AD}, /* A7AC */
3934 {0xA7AE, 0xA7AE, 0xA7AE}, {0xA7AF, 0xA7AF, 0xA7AF}, /* A7AE */
3935 {0xA7B0, 0xA7B0, 0xA7B0}, {0xA7B1, 0xA7B1, 0xA7B1}, /* A7B0 */
3936 {0xA7B2, 0xA7B2, 0xA7B2}, {0xA7B3, 0xA7B3, 0xA7B3}, /* A7B2 */
3937 {0xA7B4, 0xA7B4, 0xA7B4}, {0xA7B5, 0xA7B5, 0xA7B5}, /* A7B4 */
3938 {0xA7B6, 0xA7B6, 0xA7B6}, {0xA7B7, 0xA7B7, 0xA7B7}, /* A7B6 */
3939 {0xA7B8, 0xA7B8, 0xA7B8}, {0xA7B9, 0xA7B9, 0xA7B9}, /* A7B8 */
3940 {0xA7BA, 0xA7BA, 0xA7BA}, {0xA7BB, 0xA7BB, 0xA7BB}, /* A7BA */
3941 {0xA7BC, 0xA7BC, 0xA7BC}, {0xA7BD, 0xA7BD, 0xA7BD}, /* A7BC */
3942 {0xA7BE, 0xA7BE, 0xA7BE}, {0xA7BF, 0xA7BF, 0xA7BF}, /* A7BE */
3943 {0xA7C0, 0xA7C0, 0xA7C0}, {0xA7C1, 0xA7C1, 0xA7C1}, /* A7C0 */
3944 {0xA7C2, 0xA7C2, 0xA7C2}, {0xA7C3, 0xA7C3, 0xA7C3}, /* A7C2 */
3945 {0xA7C4, 0xA7C4, 0xA7C4}, {0xA7C5, 0xA7C5, 0xA7C5}, /* A7C4 */
3946 {0xA7C6, 0xA7C6, 0xA7C6}, {0xA7C7, 0xA7C7, 0xA7C7}, /* A7C6 */
3947 {0xA7C8, 0xA7C8, 0xA7C8}, {0xA7C9, 0xA7C9, 0xA7C9}, /* A7C8 */
3948 {0xA7CA, 0xA7CA, 0xA7CA}, {0xA7CB, 0xA7CB, 0xA7CB}, /* A7CA */
3949 {0xA7CC, 0xA7CC, 0xA7CC}, {0xA7CD, 0xA7CD, 0xA7CD}, /* A7CC */
3950 {0xA7CE, 0xA7CE, 0xA7CE}, {0xA7CF, 0xA7CF, 0xA7CF}, /* A7CE */
3951 {0xA7D0, 0xA7D0, 0xA7D0}, {0xA7D1, 0xA7D1, 0xA7D1}, /* A7D0 */
3952 {0xA7D2, 0xA7D2, 0xA7D2}, {0xA7D3, 0xA7D3, 0xA7D3}, /* A7D2 */
3953 {0xA7D4, 0xA7D4, 0xA7D4}, {0xA7D5, 0xA7D5, 0xA7D5}, /* A7D4 */
3954 {0xA7D6, 0xA7D6, 0xA7D6}, {0xA7D7, 0xA7D7, 0xA7D7}, /* A7D6 */
3955 {0xA7D8, 0xA7D8, 0xA7D8}, {0xA7D9, 0xA7D9, 0xA7D9}, /* A7D8 */
3956 {0xA7DA, 0xA7DA, 0xA7DA}, {0xA7DB, 0xA7DB, 0xA7DB}, /* A7DA */
3957 {0xA7DC, 0xA7DC, 0xA7DC}, {0xA7DD, 0xA7DD, 0xA7DD}, /* A7DC */
3958 {0xA7DE, 0xA7DE, 0xA7DE}, {0xA7DF, 0xA7DF, 0xA7DF}, /* A7DE */
3959 {0xA7E0, 0xA7E0, 0xA7E0}, {0xA7E1, 0xA7E1, 0xA7E1}, /* A7E0 */
3960 {0xA7E2, 0xA7E2, 0xA7E2}, {0xA7E3, 0xA7E3, 0xA7E3}, /* A7E2 */
3961 {0xA7E4, 0xA7E4, 0xA7E4}, {0xA7E5, 0xA7E5, 0xA7E5}, /* A7E4 */
3962 {0xA7E6, 0xA7E6, 0xA7E6}, {0xA7E7, 0xA7E7, 0xA7E7}, /* A7E6 */
3963 {0xA7E8, 0xA7E8, 0xA7E8}, {0xA7E9, 0xA7E9, 0xA7E9}, /* A7E8 */
3964 {0xA7EA, 0xA7EA, 0xA7EA}, {0xA7EB, 0xA7EB, 0xA7EB}, /* A7EA */
3965 {0xA7EC, 0xA7EC, 0xA7EC}, {0xA7ED, 0xA7ED, 0xA7ED}, /* A7EC */
3966 {0xA7EE, 0xA7EE, 0xA7EE}, {0xA7EF, 0xA7EF, 0xA7EF}, /* A7EE */
3967 {0xA7F0, 0xA7F0, 0xA7F0}, {0xA7F1, 0xA7F1, 0xA7F1}, /* A7F0 */
3968 {0xA7F2, 0xA7F2, 0xA7F2}, {0xA7F3, 0xA7F3, 0xA7F3}, /* A7F2 */
3969 {0xA7F4, 0xA7F4, 0xA7F4}, {0xA7F5, 0xA7F5, 0xA7F5}, /* A7F4 */
3970 {0xA7F6, 0xA7F6, 0xA7F6}, {0xA7F7, 0xA7F7, 0xA7F7}, /* A7F6 */
3971 {0xA7F8, 0xA7F8, 0xA7F8}, {0xA7F9, 0xA7F9, 0xA7F9}, /* A7F8 */
3972 {0xA7FA, 0xA7FA, 0xA7FA}, {0xA7FB, 0xA7FB, 0xA7FB}, /* A7FA */
3973 {0xA7FC, 0xA7FC, 0xA7FC}, {0xA7FD, 0xA7FD, 0xA7FD}, /* A7FC */
3974 {0xA7FE, 0xA7FE, 0xA7FE}, {0xA7FF, 0xA7FF, 0xA7FF} /* A7FE */
3975 };
3976
3977 static const MY_UNICASE_CHARACTER u520pFF[] = {
3978 {0xFF00, 0xFF00, 0xFF00}, {0xFF01, 0xFF01, 0xFF01}, /* FF00 */
3979 {0xFF02, 0xFF02, 0xFF02}, {0xFF03, 0xFF03, 0xFF03}, /* FF02 */
3980 {0xFF04, 0xFF04, 0xFF04}, {0xFF05, 0xFF05, 0xFF05}, /* FF04 */
3981 {0xFF06, 0xFF06, 0xFF06}, {0xFF07, 0xFF07, 0xFF07}, /* FF06 */
3982 {0xFF08, 0xFF08, 0xFF08}, {0xFF09, 0xFF09, 0xFF09}, /* FF08 */
3983 {0xFF0A, 0xFF0A, 0xFF0A}, {0xFF0B, 0xFF0B, 0xFF0B}, /* FF0A */
3984 {0xFF0C, 0xFF0C, 0xFF0C}, {0xFF0D, 0xFF0D, 0xFF0D}, /* FF0C */
3985 {0xFF0E, 0xFF0E, 0xFF0E}, {0xFF0F, 0xFF0F, 0xFF0F}, /* FF0E */
3986 {0xFF10, 0xFF10, 0xFF10}, {0xFF11, 0xFF11, 0xFF11}, /* FF10 */
3987 {0xFF12, 0xFF12, 0xFF12}, {0xFF13, 0xFF13, 0xFF13}, /* FF12 */
3988 {0xFF14, 0xFF14, 0xFF14}, {0xFF15, 0xFF15, 0xFF15}, /* FF14 */
3989 {0xFF16, 0xFF16, 0xFF16}, {0xFF17, 0xFF17, 0xFF17}, /* FF16 */
3990 {0xFF18, 0xFF18, 0xFF18}, {0xFF19, 0xFF19, 0xFF19}, /* FF18 */
3991 {0xFF1A, 0xFF1A, 0xFF1A}, {0xFF1B, 0xFF1B, 0xFF1B}, /* FF1A */
3992 {0xFF1C, 0xFF1C, 0xFF1C}, {0xFF1D, 0xFF1D, 0xFF1D}, /* FF1C */
3993 {0xFF1E, 0xFF1E, 0xFF1E}, {0xFF1F, 0xFF1F, 0xFF1F}, /* FF1E */
3994 {0xFF20, 0xFF20, 0xFF20}, {0xFF21, 0xFF41, 0xFF21}, /* FF20 */
3995 {0xFF22, 0xFF42, 0xFF22}, {0xFF23, 0xFF43, 0xFF23}, /* FF22 */
3996 {0xFF24, 0xFF44, 0xFF24}, {0xFF25, 0xFF45, 0xFF25}, /* FF24 */
3997 {0xFF26, 0xFF46, 0xFF26}, {0xFF27, 0xFF47, 0xFF27}, /* FF26 */
3998 {0xFF28, 0xFF48, 0xFF28}, {0xFF29, 0xFF49, 0xFF29}, /* FF28 */
3999 {0xFF2A, 0xFF4A, 0xFF2A}, {0xFF2B, 0xFF4B, 0xFF2B}, /* FF2A */
4000 {0xFF2C, 0xFF4C, 0xFF2C}, {0xFF2D, 0xFF4D, 0xFF2D}, /* FF2C */
4001 {0xFF2E, 0xFF4E, 0xFF2E}, {0xFF2F, 0xFF4F, 0xFF2F}, /* FF2E */
4002 {0xFF30, 0xFF50, 0xFF30}, {0xFF31, 0xFF51, 0xFF31}, /* FF30 */
4003 {0xFF32, 0xFF52, 0xFF32}, {0xFF33, 0xFF53, 0xFF33}, /* FF32 */
4004 {0xFF34, 0xFF54, 0xFF34}, {0xFF35, 0xFF55, 0xFF35}, /* FF34 */
4005 {0xFF36, 0xFF56, 0xFF36}, {0xFF37, 0xFF57, 0xFF37}, /* FF36 */
4006 {0xFF38, 0xFF58, 0xFF38}, {0xFF39, 0xFF59, 0xFF39}, /* FF38 */
4007 {0xFF3A, 0xFF5A, 0xFF3A}, {0xFF3B, 0xFF3B, 0xFF3B}, /* FF3A */
4008 {0xFF3C, 0xFF3C, 0xFF3C}, {0xFF3D, 0xFF3D, 0xFF3D}, /* FF3C */
4009 {0xFF3E, 0xFF3E, 0xFF3E}, {0xFF3F, 0xFF3F, 0xFF3F}, /* FF3E */
4010 {0xFF40, 0xFF40, 0xFF40}, {0xFF21, 0xFF41, 0xFF21}, /* FF40 */
4011 {0xFF22, 0xFF42, 0xFF22}, {0xFF23, 0xFF43, 0xFF23}, /* FF42 */
4012 {0xFF24, 0xFF44, 0xFF24}, {0xFF25, 0xFF45, 0xFF25}, /* FF44 */
4013 {0xFF26, 0xFF46, 0xFF26}, {0xFF27, 0xFF47, 0xFF27}, /* FF46 */
4014 {0xFF28, 0xFF48, 0xFF28}, {0xFF29, 0xFF49, 0xFF29}, /* FF48 */
4015 {0xFF2A, 0xFF4A, 0xFF2A}, {0xFF2B, 0xFF4B, 0xFF2B}, /* FF4A */
4016 {0xFF2C, 0xFF4C, 0xFF2C}, {0xFF2D, 0xFF4D, 0xFF2D}, /* FF4C */
4017 {0xFF2E, 0xFF4E, 0xFF2E}, {0xFF2F, 0xFF4F, 0xFF2F}, /* FF4E */
4018 {0xFF30, 0xFF50, 0xFF30}, {0xFF31, 0xFF51, 0xFF31}, /* FF50 */
4019 {0xFF32, 0xFF52, 0xFF32}, {0xFF33, 0xFF53, 0xFF33}, /* FF52 */
4020 {0xFF34, 0xFF54, 0xFF34}, {0xFF35, 0xFF55, 0xFF35}, /* FF54 */
4021 {0xFF36, 0xFF56, 0xFF36}, {0xFF37, 0xFF57, 0xFF37}, /* FF56 */
4022 {0xFF38, 0xFF58, 0xFF38}, {0xFF39, 0xFF59, 0xFF39}, /* FF58 */
4023 {0xFF3A, 0xFF5A, 0xFF3A}, {0xFF5B, 0xFF5B, 0xFF5B}, /* FF5A */
4024 {0xFF5C, 0xFF5C, 0xFF5C}, {0xFF5D, 0xFF5D, 0xFF5D}, /* FF5C */
4025 {0xFF5E, 0xFF5E, 0xFF5E}, {0xFF5F, 0xFF5F, 0xFF5F}, /* FF5E */
4026 {0xFF60, 0xFF60, 0xFF60}, {0xFF61, 0xFF61, 0xFF61}, /* FF60 */
4027 {0xFF62, 0xFF62, 0xFF62}, {0xFF63, 0xFF63, 0xFF63}, /* FF62 */
4028 {0xFF64, 0xFF64, 0xFF64}, {0xFF65, 0xFF65, 0xFF65}, /* FF64 */
4029 {0xFF66, 0xFF66, 0xFF66}, {0xFF67, 0xFF67, 0xFF67}, /* FF66 */
4030 {0xFF68, 0xFF68, 0xFF68}, {0xFF69, 0xFF69, 0xFF69}, /* FF68 */
4031 {0xFF6A, 0xFF6A, 0xFF6A}, {0xFF6B, 0xFF6B, 0xFF6B}, /* FF6A */
4032 {0xFF6C, 0xFF6C, 0xFF6C}, {0xFF6D, 0xFF6D, 0xFF6D}, /* FF6C */
4033 {0xFF6E, 0xFF6E, 0xFF6E}, {0xFF6F, 0xFF6F, 0xFF6F}, /* FF6E */
4034 {0xFF70, 0xFF70, 0xFF70}, {0xFF71, 0xFF71, 0xFF71}, /* FF70 */
4035 {0xFF72, 0xFF72, 0xFF72}, {0xFF73, 0xFF73, 0xFF73}, /* FF72 */
4036 {0xFF74, 0xFF74, 0xFF74}, {0xFF75, 0xFF75, 0xFF75}, /* FF74 */
4037 {0xFF76, 0xFF76, 0xFF76}, {0xFF77, 0xFF77, 0xFF77}, /* FF76 */
4038 {0xFF78, 0xFF78, 0xFF78}, {0xFF79, 0xFF79, 0xFF79}, /* FF78 */
4039 {0xFF7A, 0xFF7A, 0xFF7A}, {0xFF7B, 0xFF7B, 0xFF7B}, /* FF7A */
4040 {0xFF7C, 0xFF7C, 0xFF7C}, {0xFF7D, 0xFF7D, 0xFF7D}, /* FF7C */
4041 {0xFF7E, 0xFF7E, 0xFF7E}, {0xFF7F, 0xFF7F, 0xFF7F}, /* FF7E */
4042 {0xFF80, 0xFF80, 0xFF80}, {0xFF81, 0xFF81, 0xFF81}, /* FF80 */
4043 {0xFF82, 0xFF82, 0xFF82}, {0xFF83, 0xFF83, 0xFF83}, /* FF82 */
4044 {0xFF84, 0xFF84, 0xFF84}, {0xFF85, 0xFF85, 0xFF85}, /* FF84 */
4045 {0xFF86, 0xFF86, 0xFF86}, {0xFF87, 0xFF87, 0xFF87}, /* FF86 */
4046 {0xFF88, 0xFF88, 0xFF88}, {0xFF89, 0xFF89, 0xFF89}, /* FF88 */
4047 {0xFF8A, 0xFF8A, 0xFF8A}, {0xFF8B, 0xFF8B, 0xFF8B}, /* FF8A */
4048 {0xFF8C, 0xFF8C, 0xFF8C}, {0xFF8D, 0xFF8D, 0xFF8D}, /* FF8C */
4049 {0xFF8E, 0xFF8E, 0xFF8E}, {0xFF8F, 0xFF8F, 0xFF8F}, /* FF8E */
4050 {0xFF90, 0xFF90, 0xFF90}, {0xFF91, 0xFF91, 0xFF91}, /* FF90 */
4051 {0xFF92, 0xFF92, 0xFF92}, {0xFF93, 0xFF93, 0xFF93}, /* FF92 */
4052 {0xFF94, 0xFF94, 0xFF94}, {0xFF95, 0xFF95, 0xFF95}, /* FF94 */
4053 {0xFF96, 0xFF96, 0xFF96}, {0xFF97, 0xFF97, 0xFF97}, /* FF96 */
4054 {0xFF98, 0xFF98, 0xFF98}, {0xFF99, 0xFF99, 0xFF99}, /* FF98 */
4055 {0xFF9A, 0xFF9A, 0xFF9A}, {0xFF9B, 0xFF9B, 0xFF9B}, /* FF9A */
4056 {0xFF9C, 0xFF9C, 0xFF9C}, {0xFF9D, 0xFF9D, 0xFF9D}, /* FF9C */
4057 {0xFF9E, 0xFF9E, 0xFF9E}, {0xFF9F, 0xFF9F, 0xFF9F}, /* FF9E */
4058 {0xFFA0, 0xFFA0, 0xFFA0}, {0xFFA1, 0xFFA1, 0xFFA1}, /* FFA0 */
4059 {0xFFA2, 0xFFA2, 0xFFA2}, {0xFFA3, 0xFFA3, 0xFFA3}, /* FFA2 */
4060 {0xFFA4, 0xFFA4, 0xFFA4}, {0xFFA5, 0xFFA5, 0xFFA5}, /* FFA4 */
4061 {0xFFA6, 0xFFA6, 0xFFA6}, {0xFFA7, 0xFFA7, 0xFFA7}, /* FFA6 */
4062 {0xFFA8, 0xFFA8, 0xFFA8}, {0xFFA9, 0xFFA9, 0xFFA9}, /* FFA8 */
4063 {0xFFAA, 0xFFAA, 0xFFAA}, {0xFFAB, 0xFFAB, 0xFFAB}, /* FFAA */
4064 {0xFFAC, 0xFFAC, 0xFFAC}, {0xFFAD, 0xFFAD, 0xFFAD}, /* FFAC */
4065 {0xFFAE, 0xFFAE, 0xFFAE}, {0xFFAF, 0xFFAF, 0xFFAF}, /* FFAE */
4066 {0xFFB0, 0xFFB0, 0xFFB0}, {0xFFB1, 0xFFB1, 0xFFB1}, /* FFB0 */
4067 {0xFFB2, 0xFFB2, 0xFFB2}, {0xFFB3, 0xFFB3, 0xFFB3}, /* FFB2 */
4068 {0xFFB4, 0xFFB4, 0xFFB4}, {0xFFB5, 0xFFB5, 0xFFB5}, /* FFB4 */
4069 {0xFFB6, 0xFFB6, 0xFFB6}, {0xFFB7, 0xFFB7, 0xFFB7}, /* FFB6 */
4070 {0xFFB8, 0xFFB8, 0xFFB8}, {0xFFB9, 0xFFB9, 0xFFB9}, /* FFB8 */
4071 {0xFFBA, 0xFFBA, 0xFFBA}, {0xFFBB, 0xFFBB, 0xFFBB}, /* FFBA */
4072 {0xFFBC, 0xFFBC, 0xFFBC}, {0xFFBD, 0xFFBD, 0xFFBD}, /* FFBC */
4073 {0xFFBE, 0xFFBE, 0xFFBE}, {0xFFBF, 0xFFBF, 0xFFBF}, /* FFBE */
4074 {0xFFC0, 0xFFC0, 0xFFC0}, {0xFFC1, 0xFFC1, 0xFFC1}, /* FFC0 */
4075 {0xFFC2, 0xFFC2, 0xFFC2}, {0xFFC3, 0xFFC3, 0xFFC3}, /* FFC2 */
4076 {0xFFC4, 0xFFC4, 0xFFC4}, {0xFFC5, 0xFFC5, 0xFFC5}, /* FFC4 */
4077 {0xFFC6, 0xFFC6, 0xFFC6}, {0xFFC7, 0xFFC7, 0xFFC7}, /* FFC6 */
4078 {0xFFC8, 0xFFC8, 0xFFC8}, {0xFFC9, 0xFFC9, 0xFFC9}, /* FFC8 */
4079 {0xFFCA, 0xFFCA, 0xFFCA}, {0xFFCB, 0xFFCB, 0xFFCB}, /* FFCA */
4080 {0xFFCC, 0xFFCC, 0xFFCC}, {0xFFCD, 0xFFCD, 0xFFCD}, /* FFCC */
4081 {0xFFCE, 0xFFCE, 0xFFCE}, {0xFFCF, 0xFFCF, 0xFFCF}, /* FFCE */
4082 {0xFFD0, 0xFFD0, 0xFFD0}, {0xFFD1, 0xFFD1, 0xFFD1}, /* FFD0 */
4083 {0xFFD2, 0xFFD2, 0xFFD2}, {0xFFD3, 0xFFD3, 0xFFD3}, /* FFD2 */
4084 {0xFFD4, 0xFFD4, 0xFFD4}, {0xFFD5, 0xFFD5, 0xFFD5}, /* FFD4 */
4085 {0xFFD6, 0xFFD6, 0xFFD6}, {0xFFD7, 0xFFD7, 0xFFD7}, /* FFD6 */
4086 {0xFFD8, 0xFFD8, 0xFFD8}, {0xFFD9, 0xFFD9, 0xFFD9}, /* FFD8 */
4087 {0xFFDA, 0xFFDA, 0xFFDA}, {0xFFDB, 0xFFDB, 0xFFDB}, /* FFDA */
4088 {0xFFDC, 0xFFDC, 0xFFDC}, {0xFFDD, 0xFFDD, 0xFFDD}, /* FFDC */
4089 {0xFFDE, 0xFFDE, 0xFFDE}, {0xFFDF, 0xFFDF, 0xFFDF}, /* FFDE */
4090 {0xFFE0, 0xFFE0, 0xFFE0}, {0xFFE1, 0xFFE1, 0xFFE1}, /* FFE0 */
4091 {0xFFE2, 0xFFE2, 0xFFE2}, {0xFFE3, 0xFFE3, 0xFFE3}, /* FFE2 */
4092 {0xFFE4, 0xFFE4, 0xFFE4}, {0xFFE5, 0xFFE5, 0xFFE5}, /* FFE4 */
4093 {0xFFE6, 0xFFE6, 0xFFE6}, {0xFFE7, 0xFFE7, 0xFFE7}, /* FFE6 */
4094 {0xFFE8, 0xFFE8, 0xFFE8}, {0xFFE9, 0xFFE9, 0xFFE9}, /* FFE8 */
4095 {0xFFEA, 0xFFEA, 0xFFEA}, {0xFFEB, 0xFFEB, 0xFFEB}, /* FFEA */
4096 {0xFFEC, 0xFFEC, 0xFFEC}, {0xFFED, 0xFFED, 0xFFED}, /* FFEC */
4097 {0xFFEE, 0xFFEE, 0xFFEE}, {0xFFEF, 0xFFEF, 0xFFEF}, /* FFEE */
4098 {0xFFF0, 0xFFF0, 0xFFF0}, {0xFFF1, 0xFFF1, 0xFFF1}, /* FFF0 */
4099 {0xFFF2, 0xFFF2, 0xFFF2}, {0xFFF3, 0xFFF3, 0xFFF3}, /* FFF2 */
4100 {0xFFF4, 0xFFF4, 0xFFF4}, {0xFFF5, 0xFFF5, 0xFFF5}, /* FFF4 */
4101 {0xFFF6, 0xFFF6, 0xFFF6}, {0xFFF7, 0xFFF7, 0xFFF7}, /* FFF6 */
4102 {0xFFF8, 0xFFF8, 0xFFF8}, {0xFFF9, 0xFFF9, 0xFFF9}, /* FFF8 */
4103 {0xFFFA, 0xFFFA, 0xFFFA}, {0xFFFB, 0xFFFB, 0xFFFB}, /* FFFA */
4104 {0xFFFC, 0xFFFC, 0xFFFC}, {0xFFFD, 0xFFFD, 0xFFFD}, /* FFFC */
4105 {0xFFFE, 0xFFFE, 0xFFFE}, {0xFFFF, 0xFFFF, 0xFFFF} /* FFFE */
4106 };
4107
4108 static const MY_UNICASE_CHARACTER u520p104[] = {
4109 {0x10400, 0x10428, 0x10400}, {0x10401, 0x10429, 0x10401}, /* 10400 */
4110 {0x10402, 0x1042A, 0x10402}, {0x10403, 0x1042B, 0x10403}, /* 10402 */
4111 {0x10404, 0x1042C, 0x10404}, {0x10405, 0x1042D, 0x10405}, /* 10404 */
4112 {0x10406, 0x1042E, 0x10406}, {0x10407, 0x1042F, 0x10407}, /* 10406 */
4113 {0x10408, 0x10430, 0x10408}, {0x10409, 0x10431, 0x10409}, /* 10408 */
4114 {0x1040A, 0x10432, 0x1040A}, {0x1040B, 0x10433, 0x1040B}, /* 1040A */
4115 {0x1040C, 0x10434, 0x1040C}, {0x1040D, 0x10435, 0x1040D}, /* 1040C */
4116 {0x1040E, 0x10436, 0x1040E}, {0x1040F, 0x10437, 0x1040F}, /* 1040E */
4117 {0x10410, 0x10438, 0x10410}, {0x10411, 0x10439, 0x10411}, /* 10410 */
4118 {0x10412, 0x1043A, 0x10412}, {0x10413, 0x1043B, 0x10413}, /* 10412 */
4119 {0x10414, 0x1043C, 0x10414}, {0x10415, 0x1043D, 0x10415}, /* 10414 */
4120 {0x10416, 0x1043E, 0x10416}, {0x10417, 0x1043F, 0x10417}, /* 10416 */
4121 {0x10418, 0x10440, 0x10418}, {0x10419, 0x10441, 0x10419}, /* 10418 */
4122 {0x1041A, 0x10442, 0x1041A}, {0x1041B, 0x10443, 0x1041B}, /* 1041A */
4123 {0x1041C, 0x10444, 0x1041C}, {0x1041D, 0x10445, 0x1041D}, /* 1041C */
4124 {0x1041E, 0x10446, 0x1041E}, {0x1041F, 0x10447, 0x1041F}, /* 1041E */
4125 {0x10420, 0x10448, 0x10420}, {0x10421, 0x10449, 0x10421}, /* 10420 */
4126 {0x10422, 0x1044A, 0x10422}, {0x10423, 0x1044B, 0x10423}, /* 10422 */
4127 {0x10424, 0x1044C, 0x10424}, {0x10425, 0x1044D, 0x10425}, /* 10424 */
4128 {0x10426, 0x1044E, 0x10426}, {0x10427, 0x1044F, 0x10427}, /* 10426 */
4129 {0x10400, 0x10428, 0x10400}, {0x10401, 0x10429, 0x10401}, /* 10428 */
4130 {0x10402, 0x1042A, 0x10402}, {0x10403, 0x1042B, 0x10403}, /* 1042A */
4131 {0x10404, 0x1042C, 0x10404}, {0x10405, 0x1042D, 0x10405}, /* 1042C */
4132 {0x10406, 0x1042E, 0x10406}, {0x10407, 0x1042F, 0x10407}, /* 1042E */
4133 {0x10408, 0x10430, 0x10408}, {0x10409, 0x10431, 0x10409}, /* 10430 */
4134 {0x1040A, 0x10432, 0x1040A}, {0x1040B, 0x10433, 0x1040B}, /* 10432 */
4135 {0x1040C, 0x10434, 0x1040C}, {0x1040D, 0x10435, 0x1040D}, /* 10434 */
4136 {0x1040E, 0x10436, 0x1040E}, {0x1040F, 0x10437, 0x1040F}, /* 10436 */
4137 {0x10410, 0x10438, 0x10410}, {0x10411, 0x10439, 0x10411}, /* 10438 */
4138 {0x10412, 0x1043A, 0x10412}, {0x10413, 0x1043B, 0x10413}, /* 1043A */
4139 {0x10414, 0x1043C, 0x10414}, {0x10415, 0x1043D, 0x10415}, /* 1043C */
4140 {0x10416, 0x1043E, 0x10416}, {0x10417, 0x1043F, 0x10417}, /* 1043E */
4141 {0x10418, 0x10440, 0x10418}, {0x10419, 0x10441, 0x10419}, /* 10440 */
4142 {0x1041A, 0x10442, 0x1041A}, {0x1041B, 0x10443, 0x1041B}, /* 10442 */
4143 {0x1041C, 0x10444, 0x1041C}, {0x1041D, 0x10445, 0x1041D}, /* 10444 */
4144 {0x1041E, 0x10446, 0x1041E}, {0x1041F, 0x10447, 0x1041F}, /* 10446 */
4145 {0x10420, 0x10448, 0x10420}, {0x10421, 0x10449, 0x10421}, /* 10448 */
4146 {0x10422, 0x1044A, 0x10422}, {0x10423, 0x1044B, 0x10423}, /* 1044A */
4147 {0x10424, 0x1044C, 0x10424}, {0x10425, 0x1044D, 0x10425}, /* 1044C */
4148 {0x10426, 0x1044E, 0x10426}, {0x10427, 0x1044F, 0x10427}, /* 1044E */
4149 {0x10450, 0x10450, 0x10450}, {0x10451, 0x10451, 0x10451}, /* 10450 */
4150 {0x10452, 0x10452, 0x10452}, {0x10453, 0x10453, 0x10453}, /* 10452 */
4151 {0x10454, 0x10454, 0x10454}, {0x10455, 0x10455, 0x10455}, /* 10454 */
4152 {0x10456, 0x10456, 0x10456}, {0x10457, 0x10457, 0x10457}, /* 10456 */
4153 {0x10458, 0x10458, 0x10458}, {0x10459, 0x10459, 0x10459}, /* 10458 */
4154 {0x1045A, 0x1045A, 0x1045A}, {0x1045B, 0x1045B, 0x1045B}, /* 1045A */
4155 {0x1045C, 0x1045C, 0x1045C}, {0x1045D, 0x1045D, 0x1045D}, /* 1045C */
4156 {0x1045E, 0x1045E, 0x1045E}, {0x1045F, 0x1045F, 0x1045F}, /* 1045E */
4157 {0x10460, 0x10460, 0x10460}, {0x10461, 0x10461, 0x10461}, /* 10460 */
4158 {0x10462, 0x10462, 0x10462}, {0x10463, 0x10463, 0x10463}, /* 10462 */
4159 {0x10464, 0x10464, 0x10464}, {0x10465, 0x10465, 0x10465}, /* 10464 */
4160 {0x10466, 0x10466, 0x10466}, {0x10467, 0x10467, 0x10467}, /* 10466 */
4161 {0x10468, 0x10468, 0x10468}, {0x10469, 0x10469, 0x10469}, /* 10468 */
4162 {0x1046A, 0x1046A, 0x1046A}, {0x1046B, 0x1046B, 0x1046B}, /* 1046A */
4163 {0x1046C, 0x1046C, 0x1046C}, {0x1046D, 0x1046D, 0x1046D}, /* 1046C */
4164 {0x1046E, 0x1046E, 0x1046E}, {0x1046F, 0x1046F, 0x1046F}, /* 1046E */
4165 {0x10470, 0x10470, 0x10470}, {0x10471, 0x10471, 0x10471}, /* 10470 */
4166 {0x10472, 0x10472, 0x10472}, {0x10473, 0x10473, 0x10473}, /* 10472 */
4167 {0x10474, 0x10474, 0x10474}, {0x10475, 0x10475, 0x10475}, /* 10474 */
4168 {0x10476, 0x10476, 0x10476}, {0x10477, 0x10477, 0x10477}, /* 10476 */
4169 {0x10478, 0x10478, 0x10478}, {0x10479, 0x10479, 0x10479}, /* 10478 */
4170 {0x1047A, 0x1047A, 0x1047A}, {0x1047B, 0x1047B, 0x1047B}, /* 1047A */
4171 {0x1047C, 0x1047C, 0x1047C}, {0x1047D, 0x1047D, 0x1047D}, /* 1047C */
4172 {0x1047E, 0x1047E, 0x1047E}, {0x1047F, 0x1047F, 0x1047F}, /* 1047E */
4173 {0x10480, 0x10480, 0x10480}, {0x10481, 0x10481, 0x10481}, /* 10480 */
4174 {0x10482, 0x10482, 0x10482}, {0x10483, 0x10483, 0x10483}, /* 10482 */
4175 {0x10484, 0x10484, 0x10484}, {0x10485, 0x10485, 0x10485}, /* 10484 */
4176 {0x10486, 0x10486, 0x10486}, {0x10487, 0x10487, 0x10487}, /* 10486 */
4177 {0x10488, 0x10488, 0x10488}, {0x10489, 0x10489, 0x10489}, /* 10488 */
4178 {0x1048A, 0x1048A, 0x1048A}, {0x1048B, 0x1048B, 0x1048B}, /* 1048A */
4179 {0x1048C, 0x1048C, 0x1048C}, {0x1048D, 0x1048D, 0x1048D}, /* 1048C */
4180 {0x1048E, 0x1048E, 0x1048E}, {0x1048F, 0x1048F, 0x1048F}, /* 1048E */
4181 {0x10490, 0x10490, 0x10490}, {0x10491, 0x10491, 0x10491}, /* 10490 */
4182 {0x10492, 0x10492, 0x10492}, {0x10493, 0x10493, 0x10493}, /* 10492 */
4183 {0x10494, 0x10494, 0x10494}, {0x10495, 0x10495, 0x10495}, /* 10494 */
4184 {0x10496, 0x10496, 0x10496}, {0x10497, 0x10497, 0x10497}, /* 10496 */
4185 {0x10498, 0x10498, 0x10498}, {0x10499, 0x10499, 0x10499}, /* 10498 */
4186 {0x1049A, 0x1049A, 0x1049A}, {0x1049B, 0x1049B, 0x1049B}, /* 1049A */
4187 {0x1049C, 0x1049C, 0x1049C}, {0x1049D, 0x1049D, 0x1049D}, /* 1049C */
4188 {0x1049E, 0x1049E, 0x1049E}, {0x1049F, 0x1049F, 0x1049F}, /* 1049E */
4189 {0x104A0, 0x104A0, 0x104A0}, {0x104A1, 0x104A1, 0x104A1}, /* 104A0 */
4190 {0x104A2, 0x104A2, 0x104A2}, {0x104A3, 0x104A3, 0x104A3}, /* 104A2 */
4191 {0x104A4, 0x104A4, 0x104A4}, {0x104A5, 0x104A5, 0x104A5}, /* 104A4 */
4192 {0x104A6, 0x104A6, 0x104A6}, {0x104A7, 0x104A7, 0x104A7}, /* 104A6 */
4193 {0x104A8, 0x104A8, 0x104A8}, {0x104A9, 0x104A9, 0x104A9}, /* 104A8 */
4194 {0x104AA, 0x104AA, 0x104AA}, {0x104AB, 0x104AB, 0x104AB}, /* 104AA */
4195 {0x104AC, 0x104AC, 0x104AC}, {0x104AD, 0x104AD, 0x104AD}, /* 104AC */
4196 {0x104AE, 0x104AE, 0x104AE}, {0x104AF, 0x104AF, 0x104AF}, /* 104AE */
4197 {0x104B0, 0x104B0, 0x104B0}, {0x104B1, 0x104B1, 0x104B1}, /* 104B0 */
4198 {0x104B2, 0x104B2, 0x104B2}, {0x104B3, 0x104B3, 0x104B3}, /* 104B2 */
4199 {0x104B4, 0x104B4, 0x104B4}, {0x104B5, 0x104B5, 0x104B5}, /* 104B4 */
4200 {0x104B6, 0x104B6, 0x104B6}, {0x104B7, 0x104B7, 0x104B7}, /* 104B6 */
4201 {0x104B8, 0x104B8, 0x104B8}, {0x104B9, 0x104B9, 0x104B9}, /* 104B8 */
4202 {0x104BA, 0x104BA, 0x104BA}, {0x104BB, 0x104BB, 0x104BB}, /* 104BA */
4203 {0x104BC, 0x104BC, 0x104BC}, {0x104BD, 0x104BD, 0x104BD}, /* 104BC */
4204 {0x104BE, 0x104BE, 0x104BE}, {0x104BF, 0x104BF, 0x104BF}, /* 104BE */
4205 {0x104C0, 0x104C0, 0x104C0}, {0x104C1, 0x104C1, 0x104C1}, /* 104C0 */
4206 {0x104C2, 0x104C2, 0x104C2}, {0x104C3, 0x104C3, 0x104C3}, /* 104C2 */
4207 {0x104C4, 0x104C4, 0x104C4}, {0x104C5, 0x104C5, 0x104C5}, /* 104C4 */
4208 {0x104C6, 0x104C6, 0x104C6}, {0x104C7, 0x104C7, 0x104C7}, /* 104C6 */
4209 {0x104C8, 0x104C8, 0x104C8}, {0x104C9, 0x104C9, 0x104C9}, /* 104C8 */
4210 {0x104CA, 0x104CA, 0x104CA}, {0x104CB, 0x104CB, 0x104CB}, /* 104CA */
4211 {0x104CC, 0x104CC, 0x104CC}, {0x104CD, 0x104CD, 0x104CD}, /* 104CC */
4212 {0x104CE, 0x104CE, 0x104CE}, {0x104CF, 0x104CF, 0x104CF}, /* 104CE */
4213 {0x104D0, 0x104D0, 0x104D0}, {0x104D1, 0x104D1, 0x104D1}, /* 104D0 */
4214 {0x104D2, 0x104D2, 0x104D2}, {0x104D3, 0x104D3, 0x104D3}, /* 104D2 */
4215 {0x104D4, 0x104D4, 0x104D4}, {0x104D5, 0x104D5, 0x104D5}, /* 104D4 */
4216 {0x104D6, 0x104D6, 0x104D6}, {0x104D7, 0x104D7, 0x104D7}, /* 104D6 */
4217 {0x104D8, 0x104D8, 0x104D8}, {0x104D9, 0x104D9, 0x104D9}, /* 104D8 */
4218 {0x104DA, 0x104DA, 0x104DA}, {0x104DB, 0x104DB, 0x104DB}, /* 104DA */
4219 {0x104DC, 0x104DC, 0x104DC}, {0x104DD, 0x104DD, 0x104DD}, /* 104DC */
4220 {0x104DE, 0x104DE, 0x104DE}, {0x104DF, 0x104DF, 0x104DF}, /* 104DE */
4221 {0x104E0, 0x104E0, 0x104E0}, {0x104E1, 0x104E1, 0x104E1}, /* 104E0 */
4222 {0x104E2, 0x104E2, 0x104E2}, {0x104E3, 0x104E3, 0x104E3}, /* 104E2 */
4223 {0x104E4, 0x104E4, 0x104E4}, {0x104E5, 0x104E5, 0x104E5}, /* 104E4 */
4224 {0x104E6, 0x104E6, 0x104E6}, {0x104E7, 0x104E7, 0x104E7}, /* 104E6 */
4225 {0x104E8, 0x104E8, 0x104E8}, {0x104E9, 0x104E9, 0x104E9}, /* 104E8 */
4226 {0x104EA, 0x104EA, 0x104EA}, {0x104EB, 0x104EB, 0x104EB}, /* 104EA */
4227 {0x104EC, 0x104EC, 0x104EC}, {0x104ED, 0x104ED, 0x104ED}, /* 104EC */
4228 {0x104EE, 0x104EE, 0x104EE}, {0x104EF, 0x104EF, 0x104EF}, /* 104EE */
4229 {0x104F0, 0x104F0, 0x104F0}, {0x104F1, 0x104F1, 0x104F1}, /* 104F0 */
4230 {0x104F2, 0x104F2, 0x104F2}, {0x104F3, 0x104F3, 0x104F3}, /* 104F2 */
4231 {0x104F4, 0x104F4, 0x104F4}, {0x104F5, 0x104F5, 0x104F5}, /* 104F4 */
4232 {0x104F6, 0x104F6, 0x104F6}, {0x104F7, 0x104F7, 0x104F7}, /* 104F6 */
4233 {0x104F8, 0x104F8, 0x104F8}, {0x104F9, 0x104F9, 0x104F9}, /* 104F8 */
4234 {0x104FA, 0x104FA, 0x104FA}, {0x104FB, 0x104FB, 0x104FB}, /* 104FA */
4235 {0x104FC, 0x104FC, 0x104FC}, {0x104FD, 0x104FD, 0x104FD}, /* 104FC */
4236 {0x104FE, 0x104FE, 0x104FE}, {0x104FF, 0x104FF, 0x104FF} /* 104FE */
4237 };
4238
4239 const MY_UNICASE_CHARACTER *my_unicase_pages_unicode520[4352] = {
4240 u520p00, u520p01, u520p02, u520p03, u520p04, u520p05, nullptr, nullptr,
4241 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4242 u520p10, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4243 nullptr, nullptr, nullptr, nullptr, nullptr, u520p1D, u520p1E, u520p1F,
4244 nullptr, u520p21, nullptr, nullptr, u520p24, nullptr, nullptr, nullptr,
4245 nullptr, nullptr, nullptr, nullptr, u520p2C, u520p2D, nullptr, nullptr,
4246 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4247 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4248 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4249 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4250 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4251 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4252 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4253 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4254 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4255 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4256 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4257 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4258 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4259 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4260 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, u520pA6, u520pA7,
4261 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4262 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4263 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4264 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4265 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4266 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4267 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4268 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4269 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4270 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4271 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, u520pFF,
4272 nullptr, nullptr, nullptr, nullptr, u520p104, nullptr, nullptr, nullptr,
4273 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4274 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4275 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4276 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4277 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4278 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4279 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4280 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4281 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4282 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4283 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4284 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4285 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4286 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4287 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4288 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4289 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4290 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4291 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4292 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4293 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4294 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4295 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4296 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4297 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4298 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4299 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4300 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4301 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4302 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4303 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4304 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4305 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4306 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4307 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4308 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4309 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4310 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4311 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4312 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4313 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4314 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4315 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4316 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4317 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4318 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4319 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4320 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4321 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4322 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4323 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4324 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4325 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4326 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4327 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4328 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4329 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4330 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4331 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4332 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4333 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4334 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4335 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4336 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4337 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4338 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4339 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4340 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4341 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4342 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4343 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4344 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4345 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4346 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4347 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4348 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4349 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4350 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4351 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4352 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4353 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4354 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4355 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4356 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4357 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4358 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4359 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4360 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4361 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4362 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4363 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4364 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4365 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4366 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4367 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4368 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4369 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4370 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4371 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4372 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4373 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4374 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4375 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4376 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4377 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4378 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4379 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4380 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4381 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4382 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4383 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4384 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4385 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4386 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4387 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4388 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4389 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4390 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4391 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4392 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4393 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4394 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4395 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4396 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4397 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4398 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4399 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4400 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4401 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4402 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4403 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4404 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4405 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4406 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4407 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4408 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4409 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4410 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4411 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4412 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4413 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4414 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4415 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4416 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4417 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4418 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4419 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4420 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4421 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4422 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4423 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4424 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4425 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4426 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4427 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4428 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4429 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4430 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4431 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4432 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4433 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4434 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4435 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4436 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4437 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4438 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4439 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4440 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4441 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4442 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4443 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4444 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4445 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4446 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4447 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4448 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4449 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4450 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4451 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4452 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4453 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4454 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4455 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4456 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4457 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4458 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4459 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4460 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4461 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4462 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4463 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4464 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4465 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4466 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4467 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4468 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4469 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4470 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4471 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4472 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4473 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4474 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4475 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4476 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4477 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4478 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4479 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4480 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4481 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4482 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4483 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4484 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4485 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4486 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4487 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4488 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4489 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4490 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4491 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4492 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4493 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4494 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4495 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4496 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4497 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4498 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4499 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4500 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4501 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4502 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4503 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4504 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4505 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4506 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4507 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4508 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4509 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4510 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4511 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4512 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4513 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4514 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4515 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4516 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4517 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4518 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4519 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4520 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4521 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4522 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4523 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4524 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4525 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4526 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4527 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4528 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4529 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4530 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4531 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4532 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4533 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4534 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4535 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4536 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4537 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4538 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4539 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4540 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4541 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4542 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4543 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4544 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4545 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4546 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4547 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4548 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4549 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4550 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4551 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4552 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4553 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4554 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4555 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4556 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4557 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4558 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4559 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4560 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4561 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4562 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4563 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4564 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4565 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4566 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4567 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4568 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4569 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4570 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4571 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4572 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4573 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4574 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4575 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4576 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4577 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4578 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4579 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4580 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4581 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4582 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4583 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4584 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4585 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4586 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4587 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4588 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4589 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4590 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4591 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4592 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4593 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4594 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4595 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4596 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4597 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4598 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4599 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4600 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4601 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4602 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4603 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4604 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4605 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4606 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4607 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4608 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4609 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4610 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4611 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4612 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4613 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4614 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4615 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4616 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4617 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4618 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4619 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4620 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4621 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4622 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4623 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4624 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4625 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4626 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4627 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4628 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4629 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4630 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4631 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4632 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4633 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4634 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4635 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4636 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4637 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4638 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4639 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4640 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4641 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4642 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4643 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4644 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4645 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4646 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4647 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4648 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4649 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4650 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4651 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4652 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4653 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4654 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4655 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4656 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4657 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4658 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4659 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4660 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4661 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4662 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4663 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4664 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4665 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4666 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4667 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4668 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4669 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4670 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4671 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4672 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4673 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4674 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4675 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4676 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4677 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4678 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4679 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4680 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4681 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4682 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4683 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4684 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4685 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4686 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4687 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4688 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4689 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4690 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4691 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4692 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4693 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4694 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4695 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4696 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4697 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4698 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4699 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4700 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4701 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4702 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4703 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4704 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4705 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4706 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4707 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4708 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4709 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4710 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4711 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4712 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4713 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4714 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4715 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4716 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4717 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4718 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4719 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4720 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4721 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4722 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4723 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4724 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4725 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4726 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4727 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4728 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4729 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4730 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4731 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4732 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4733 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4734 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4735 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4736 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4737 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4738 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4739 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4740 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4741 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4742 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4743 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4744 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4745 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4746 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4747 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4748 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4749 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4750 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4751 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4752 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4753 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4754 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4755 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4756 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4757 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4758 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4759 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4760 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4761 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4762 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4763 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4764 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4765 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4766 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4767 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4768 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4769 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4770 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4771 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4772 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4773 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4774 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4775 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4776 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4777 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4778 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4779 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4780 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4781 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4782 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4783 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4784 };
4785
4786 MY_UNICASE_INFO my_unicase_unicode520 = {0x10FFFF, my_unicase_pages_unicode520};
4787
4788 13561380381 static inline void my_tosort_unicode(const MY_UNICASE_INFO *uni_plane,
4789 my_wc_t *wc, uint flags) {
4790
2/2
✓ Branch 0 taken 13557223108 times.
✓ Branch 1 taken 4157273 times.
13561380381 if (*wc <= uni_plane->maxchar) {
4791 const MY_UNICASE_CHARACTER *page;
4792
2/2
✓ Branch 0 taken 13556102312 times.
✓ Branch 1 taken 1120796 times.
13557223108 if ((page = uni_plane->page[*wc >> 8]))
4793
2/2
✓ Branch 0 taken 4000787041 times.
✓ Branch 1 taken 9555315271 times.
23111417583 *wc = (flags & MY_CS_LOWER_SORT) ? page[*wc & 0xFF].tolower
4794 9555315271 : page[*wc & 0xFF].sort;
4795 } else {
4796 4194304 *wc = MY_CS_REPLACEMENT_CHARACTER;
4797 }
4798 13561380381 }
4799
4800 /*
4801 ** Compare string against string with wildcard
4802 ** This function is used in UTF8 and UCS2
4803 **
4804 ** 0 if matched
4805 ** -1 if not matched with wildcard
4806 ** 1 if matched with wildcard
4807 */
4808
4809 1225595 static int my_wildcmp_unicode_impl(const CHARSET_INFO *cs, const char *str,
4810 const char *str_end, const char *wildstr,
4811 const char *wildend, int escape, int w_one,
4812 int w_many, const MY_UNICASE_INFO *weights,
4813 int recurse_level) {
4814 1225595 int result = -1; /* Not found, using wildcards */
4815 my_wc_t s_wc, w_wc;
4816 int scan;
4817 int (*mb_wc)(const CHARSET_INFO *, my_wc_t *, const uchar *, const uchar *);
4818 1225595 mb_wc = cs->cset->mb_wc;
4819
4820
4/8
✓ Branch 0 taken 1225595 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1225595 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1225595 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1225595 times.
1225595 if (my_string_stack_guard && my_string_stack_guard(recurse_level)) return 1;
4821
2/2
✓ Branch 0 taken 1225230 times.
✓ Branch 1 taken 365 times.
1225595 while (wildstr != wildend) {
4822 while (true) {
4823 1640225 bool escaped = false;
4824
1/2
✓ Branch 0 taken 1640225 times.
✗ Branch 1 not taken.
1640225 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4825
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1640225 times.
1640225 (const uchar *)wildend)) <= 0)
4826 return 1;
4827
4828
2/2
✓ Branch 0 taken 166121 times.
✓ Branch 1 taken 1474104 times.
1640225 if (w_wc == (my_wc_t)w_many) {
4829 166121 result = 1; /* Found an anchor char */
4830 166121 break;
4831 }
4832
4833 1474104 wildstr += scan;
4834
4/4
✓ Branch 0 taken 193 times.
✓ Branch 1 taken 1473911 times.
✓ Branch 2 taken 192 times.
✓ Branch 3 taken 1 times.
1474104 if (w_wc == (my_wc_t)escape && wildstr < wildend) {
4835
1/2
✓ Branch 0 taken 192 times.
✗ Branch 1 not taken.
192 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4836
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 192 times.
192 (const uchar *)wildend)) <= 0)
4837 return 1;
4838 192 wildstr += scan;
4839 192 escaped = true;
4840 }
4841
4842
1/2
✓ Branch 0 taken 1474104 times.
✗ Branch 1 not taken.
1474104 if ((scan = mb_wc(cs, &s_wc, (const uchar *)str,
4843
2/2
✓ Branch 0 taken 9399 times.
✓ Branch 1 taken 1464705 times.
1474104 (const uchar *)str_end)) <= 0)
4844 9399 return 1;
4845 1464705 str += scan;
4846
4847
4/4
✓ Branch 0 taken 1464513 times.
✓ Branch 1 taken 192 times.
✓ Branch 2 taken 27659 times.
✓ Branch 3 taken 1436854 times.
1464705 if (!escaped && w_wc == (my_wc_t)w_one) {
4848 27659 result = 1; /* Found an anchor char */
4849 } else {
4850
2/2
✓ Branch 0 taken 1436665 times.
✓ Branch 1 taken 381 times.
1437046 if (weights) {
4851 1436665 my_tosort_unicode(weights, &s_wc, cs->state);
4852 1436665 my_tosort_unicode(weights, &w_wc, cs->state);
4853 }
4854
2/2
✓ Branch 0 taken 1034928 times.
✓ Branch 1 taken 402118 times.
1437046 if (s_wc != w_wc) return 1; /* No match */
4855 }
4856
2/2
✓ Branch 0 taken 14782 times.
✓ Branch 1 taken 414995 times.
429777 if (wildstr == wildend)
4857 14782 return (str != str_end); /* Match if both are at end */
4858 414995 }
4859
4860
1/2
✓ Branch 0 taken 166121 times.
✗ Branch 1 not taken.
166121 if (w_wc == (my_wc_t)w_many) { /* Found w_many */
4861
4862 /* Remove any '%' and '_' from the wild search string */
4863
2/2
✓ Branch 0 taken 305437 times.
✓ Branch 1 taken 26877 times.
332314 for (; wildstr != wildend;) {
4864
1/2
✓ Branch 0 taken 305437 times.
✗ Branch 1 not taken.
305437 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4865
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 305437 times.
305437 (const uchar *)wildend)) <= 0)
4866 return 1;
4867
4868
2/2
✓ Branch 0 taken 166185 times.
✓ Branch 1 taken 139252 times.
305437 if (w_wc == (my_wc_t)w_many) {
4869 166185 wildstr += scan;
4870 166185 continue;
4871 }
4872
4873
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 139244 times.
139252 if (w_wc == (my_wc_t)w_one) {
4874 8 wildstr += scan;
4875
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 if ((scan = mb_wc(cs, &s_wc, (const uchar *)str,
4876
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 (const uchar *)str_end)) <= 0)
4877 return 1;
4878 8 str += scan;
4879 8 continue;
4880 }
4881 139244 break; /* Not a wild character */
4882 }
4883
4884
2/2
✓ Branch 0 taken 26877 times.
✓ Branch 1 taken 139244 times.
166121 if (wildstr == wildend) return 0; /* Ok if w_many is last */
4885
4886
2/2
✓ Branch 0 taken 191 times.
✓ Branch 1 taken 139053 times.
139244 if (str == str_end) return -1;
4887
4888
1/2
✓ Branch 0 taken 139053 times.
✗ Branch 1 not taken.
139053 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4889
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 139053 times.
139053 (const uchar *)wildend)) <= 0)
4890 return 1;
4891 139053 wildstr += scan;
4892
4893
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 139052 times.
139053 if (w_wc == (my_wc_t)escape) {
4894
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 if (wildstr < wildend) {
4895 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4896 (const uchar *)wildend)) <= 0)
4897 return 1;
4898 wildstr += scan;
4899 }
4900 }
4901
4902 while (true) {
4903 /* Skip until the first character from wildstr is found */
4904
2/2
✓ Branch 0 taken 2886117 times.
✓ Branch 1 taken 127528 times.
3013645 while (str != str_end) {
4905
1/2
✓ Branch 0 taken 2886117 times.
✗ Branch 1 not taken.
2886117 if ((scan = mb_wc(cs, &s_wc, (const uchar *)str,
4906
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2886117 times.
2886117 (const uchar *)str_end)) <= 0)
4907 return 1;
4908
1/2
✓ Branch 0 taken 2886117 times.
✗ Branch 1 not taken.
2886117 if (weights) {
4909 2886117 my_tosort_unicode(weights, &s_wc, cs->state);
4910 2886117 my_tosort_unicode(weights, &w_wc, cs->state);
4911 }
4912
4913
2/2
✓ Branch 0 taken 157236 times.
✓ Branch 1 taken 2728881 times.
2886117 if (s_wc == w_wc) break;
4914 2728881 str += scan;
4915 }
4916
2/2
✓ Branch 0 taken 127528 times.
✓ Branch 1 taken 157236 times.
284764 if (str == str_end) return -1;
4917
4918 157236 str += scan;
4919 result =
4920
1/2
✓ Branch 0 taken 157236 times.
✗ Branch 1 not taken.
157236 my_wildcmp_unicode_impl(cs, str, str_end, wildstr, wildend, escape,
4921 w_one, w_many, weights, recurse_level + 1);
4922
2/2
✓ Branch 0 taken 11525 times.
✓ Branch 1 taken 145711 times.
157236 if (result <= 0) return result;
4923 }
4924 }
4925 }
4926
2/2
✓ Branch 0 taken 210 times.
✓ Branch 1 taken 155 times.
365 return (str != str_end ? 1 : 0);
4927 }
4928
4929 1068359 int my_wildcmp_unicode(const CHARSET_INFO *cs, const char *str,
4930 const char *str_end, const char *wildstr,
4931 const char *wildend, int escape, int w_one, int w_many,
4932 const MY_UNICASE_INFO *weights) {
4933 1068359 return my_wildcmp_unicode_impl(cs, str, str_end, wildstr, wildend, escape,
4934 1068359 w_one, w_many, weights, 1);
4935 }
4936
4937 namespace {
4938
4939 template <class Pointee, class Offset>
4940 51258444 Pointee *add_with_saturate(Pointee *ptr, Offset offset) {
4941 static_assert(!is_signed<Pointee>::value, "pointers must be unsigned");
4942 static_assert(!is_signed<Offset>::value, "offset must be unsigned");
4943
4944 51258444 Pointee *new_ptr = ptr + offset;
4945
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 51258444 times.
51258444 if (new_ptr < ptr) {
4946 // Value wrapped around; saturate to the maximum value.
4947 // Note that numeric_limits<Pointee *> is not necessarily specialized.
4948 return reinterpret_cast<Pointee *>(intptr_t(-1));
4949 }
4950 51258444 return new_ptr;
4951 }
4952
4953 } // namespace
4954
4955 /**
4956 Pad buffer with weights for space characters.
4957
4958 @details
4959 This functions fills the buffer pointed by "str"
4960 with weights of space character. Not more than
4961 "nweights" weights are put. If at some iteration
4962 step only a half of weight can fit
4963 (which is possible if buffer length is an odd number)
4964 then a half of this weight is put - this gives
4965 a little bit better ORDER BY result for long strings.
4966
4967 @param str Buffer
4968 @param strend End of buffer
4969 @param nweights Number of weights
4970
4971 @return Result length
4972 */
4973
4974 25629222 static size_t my_strxfrm_pad_nweights_unicode(uchar *str, uchar *strend,
4975 size_t nweights) {
4976
2/4
✓ Branch 0 taken 25629222 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 25629222 times.
✗ Branch 3 not taken.
25629222 assert(str && str <= strend);
4977 51258444 strend = std::min(
4978 25629222 strend, add_with_saturate(add_with_saturate(str, nweights), nweights));
4979
4980 25629222 uchar *str0 = str;
4981 // Write 16 bytes of padding at a time. (Constant-sized memcpy
4982 // usually gets optimized to large, unaligned writes.)
4983 static constexpr char pattern[16] = {0, 0x20, 0, 0x20, 0, 0x20, 0, 0x20,
4984 0, 0x20, 0, 0x20, 0, 0x20, 0, 0x20};
4985 25629222 const size_t blocks_fast_path = (strend - str) / sizeof(pattern);
4986
2/2
✓ Branch 0 taken 347993646 times.
✓ Branch 1 taken 25629222 times.
373622868 for (size_t i = 0; i < blocks_fast_path; ++i) {
4987 347993646 memcpy(str, pattern, sizeof(pattern));
4988 347993646 str += sizeof(pattern);
4989 }
4990 25629222 memcpy(str, pattern, strend - str);
4991 25629222 return strend - str0;
4992 }
4993
4994 /**
4995 Pad buffer with weights for space characters.
4996
4997 @details
4998 This functions fills the buffer pointed by "str"
4999 with weights of space character. Putting half of weight
5000 (when buffer length is an odd number) is OK.
5001
5002 @param str Buffer
5003 @param strend End of buffer
5004
5005 @return Result length
5006 */
5007
5008 2924 static size_t my_strxfrm_pad_unicode(uchar *str, uchar *strend) {
5009 2924 uchar *str0 = str;
5010
2/4
✓ Branch 0 taken 2924 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2924 times.
✗ Branch 3 not taken.
2924 assert(str && str <= strend);
5011
2/2
✓ Branch 0 taken 6828 times.
✓ Branch 1 taken 2924 times.
9752 for (; str < strend;) {
5012 6828 *str++ = 0x00;
5013
2/2
✓ Branch 0 taken 6736 times.
✓ Branch 1 taken 92 times.
6828 if (str < strend) *str++ = 0x20;
5014 }
5015 2924 return str - str0;
5016 }
5017
5018 /*
5019 Actual implementation of my_strnxfrm_unicode, specialized by the mb_wc
5020 function (ie., the function that converts multibyte characters to
5021 one wide character). This is inlined because the call overhead of
5022 mb_wc() would otherwise be quite large.
5023 */
5024 template <class Mb_wc>
5025 65397318 static inline size_t my_strnxfrm_unicode_tmpl(const CHARSET_INFO *cs,
5026 Mb_wc mb_wc, uchar *dst,
5027 size_t dstlen, uint nweights,
5028 const uchar *src, size_t srclen,
5029 uint flags) {
5030 65397318 uchar *dst0 = dst;
5031 65397318 uchar *de = dst + dstlen;
5032 65397318 const uchar *se = src + srclen;
5033
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 32698659 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
65397318 assert(src || srclen == 0);
5034
5035 // We manually hoist this if test out of the loop; seemingly GCC
5036 // (at least 6.1.1) isn't smart enough to do it on its own.
5037
2/2
✓ Branch 0 taken 9697345 times.
✓ Branch 1 taken 23001314 times.
65397318 if (cs->state & MY_CS_BINSORT) {
5038 // Do as many whole characters as we can.
5039 19394690 const size_t nweights_fast_path =
5040 19394690 std::min<size_t>((de - dst) / 2, nweights);
5041
2/2
✓ Branch 0 taken 190043837 times.
✓ Branch 1 taken 132429 times.
380352532 for (size_t i = 0; i < nweights_fast_path; ++i, --nweights) {
5042 my_wc_t wc;
5043
1/2
✓ Branch 0 taken 80815 times.
✗ Branch 1 not taken.
380087674 int res = mb_wc(&wc, src, se);
5044
2/2
✓ Branch 0 taken 9564916 times.
✓ Branch 1 taken 180478921 times.
380087674 if (res <= 0) // End of string, or invalid character.
5045 19129832 goto pad;
5046 360957842 src += res;
5047 721915684 dst = store16be(dst, wc);
5048 }
5049
5050 // Leftover single byte, if any.
5051
3/4
✓ Branch 0 taken 129052 times.
✓ Branch 1 taken 3377 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 129052 times.
264858 if (dst < de && nweights) {
5052 my_wc_t wc;
5053 int res = mb_wc(&wc, src, se);
5054 if (res > 0) {
5055 src += res;
5056 *dst++ = (uchar)(wc >> 8);
5057 }
5058 }
5059 } else {
5060 46002628 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5061
5062 // Do as many whole characters as we can.
5063 46002632 const size_t nweights_fast_path =
5064 46002628 std::min<size_t>((de - dst) / 2, nweights);
5065
2/2
✓ Branch 0 taken 331262707 times.
✓ Branch 1 taken 6937021 times.
676399456 for (size_t i = 0; i < nweights_fast_path; ++i, --nweights) {
5066 my_wc_t wc;
5067
1/2
✓ Branch 0 taken 4603384 times.
✗ Branch 1 not taken.
662525424 int res = mb_wc(&wc, src, se);
5068
2/2
✓ Branch 0 taken 16064300 times.
✓ Branch 1 taken 315198412 times.
662525424 if (res <= 0) // End of string, or invalid character.
5069 32128600 goto pad;
5070 630396824 src += res;
5071
5072 630396824 my_tosort_unicode(uni_plane, &wc, cs->state);
5073
5074 1260793648 dst = store16be(dst, wc);
5075 }
5076
5077 // Leftover single byte, if any.
5078
4/4
✓ Branch 0 taken 2164977 times.
✓ Branch 1 taken 4772044 times.
✓ Branch 2 taken 4772032 times.
✓ Branch 3 taken 12 times.
13874042 if (dst < de && nweights) {
5079 my_wc_t wc;
5080
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
24 int res = mb_wc(&wc, src, se);
5081
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
24 if (res > 0) {
5082 12 my_tosort_unicode(uni_plane, &wc, cs->state);
5083 12 src += res;
5084 12 *dst++ = (uchar)(wc >> 8);
5085 }
5086 }
5087 }
5088
5089 13874018 pad:
5090
4/4
✓ Branch 0 taken 30530306 times.
✓ Branch 1 taken 2168360 times.
✓ Branch 2 taken 25629222 times.
✓ Branch 3 taken 4901084 times.
65397332 if (dst < de && nweights) // PAD SPACE behavior.
5091 51258444 dst += my_strxfrm_pad_nweights_unicode(dst, de, nweights);
5092
5093
4/4
✓ Branch 0 taken 26389110 times.
✓ Branch 1 taken 6309556 times.
✓ Branch 2 taken 2924 times.
✓ Branch 3 taken 26386186 times.
65397332 if ((flags & MY_STRXFRM_PAD_TO_MAXLEN) && dst < de)
5094 5848 dst += my_strxfrm_pad_unicode(dst, de);
5095 65397332 return dst - dst0;
5096 }
5097
5098 /*
5099 Store sorting weights using 2 bytes per character.
5100
5101 This function is shared between
5102 - utf8mb3_general_ci, utf8mb3_bin, ucs2_general_ci, ucs2_bin
5103 which support BMP only (U+0000..U+FFFF).
5104 - utf8mb4_general_ci, utf16_general_ci, utf32_general_ci,
5105 which map all supplementary characters to weight 0xFFFD.
5106 */
5107 32698661 size_t my_strnxfrm_unicode(const CHARSET_INFO *cs, uchar *dst, size_t dstlen,
5108 uint nweights, const uchar *src, size_t srclen,
5109 uint flags) {
5110 // my_mb_wc_utf8mb3 is so common that we special-case it; short-circuit away
5111 // the thunk, and get it inlined.
5112
2/2
✓ Branch 0 taken 28033026 times.
✓ Branch 1 taken 4665635 times.
32698661 if (cs->cset->mb_wc == my_mb_wc_utf8mb3_thunk) {
5113 28033026 return my_strnxfrm_unicode_tmpl(cs, Mb_wc_utf8mb3(), dst, dstlen, nweights,
5114 28033027 src, srclen, flags);
5115 } else {
5116 // Fallback using a function pointer (which the compiler is unlikely
5117 // to be able to optimize away).
5118 4665635 Mb_wc_through_function_pointer mb_wc(cs);
5119
1/2
✓ Branch 0 taken 4665636 times.
✗ Branch 1 not taken.
4665636 return my_strnxfrm_unicode_tmpl(cs, mb_wc, dst, dstlen, nweights, src,
5120 4665636 srclen, flags);
5121 }
5122 }
5123
5124 /*
5125 Store sorting weights using 3 bytes per character.
5126 This function is shared between utf8mb4_bin, utf16_bin, utf32_bin.
5127 */
5128 4510991 size_t my_strnxfrm_unicode_full_bin(const CHARSET_INFO *cs, uchar *dst,
5129 size_t dstlen, uint nweights,
5130 const uchar *src, size_t srclen,
5131 uint flags) {
5132 4510991 my_wc_t wc = 0;
5133 4510991 uchar *dst0 = dst;
5134 4510991 uchar *de = dst + dstlen;
5135 4510991 const uchar *se = src + srclen;
5136
5137
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 4510991 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
4510991 assert(src || srclen == 0);
5138
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4510991 times.
4510991 assert(cs->state & MY_CS_BINSORT);
5139
5140
4/4
✓ Branch 0 taken 9167501 times.
✓ Branch 1 taken 606 times.
✓ Branch 2 taken 4717085 times.
✓ Branch 3 taken 4450416 times.
9168107 for (; dst < de && nweights; nweights--) {
5141 int res;
5142
3/4
✓ Branch 0 taken 4717085 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59969 times.
✓ Branch 3 taken 4657116 times.
4717085 if ((res = cs->cset->mb_wc(cs, &wc, src, se)) <= 0) break;
5143 4657116 src += res;
5144 4657116 *dst++ = (uchar)(wc >> 16);
5145
2/2
✓ Branch 0 taken 4657080 times.
✓ Branch 1 taken 36 times.
4657116 if (dst < de) {
5146 4657080 *dst++ = (uchar)((wc >> 8) & 0xFF);
5147
2/2
✓ Branch 0 taken 4656666 times.
✓ Branch 1 taken 414 times.
4657080 if (dst < de) *dst++ = (uchar)(wc & 0xFF);
5148 }
5149 }
5150
5151
2/2
✓ Branch 0 taken 57671 times.
✓ Branch 1 taken 4453320 times.
4510991 if (flags & MY_STRXFRM_PAD_TO_MAXLEN) {
5152 // Pad with an infinite amount of spaces.
5153
2/2
✓ Branch 0 taken 1803160 times.
✓ Branch 1 taken 57671 times.
1860831 while (dst < de) {
5154 1803160 *dst++ = 0x00;
5155
2/2
✓ Branch 0 taken 1803115 times.
✓ Branch 1 taken 45 times.
1803160 if (dst < de) {
5156 1803115 *dst++ = 0x00;
5157
2/2
✓ Branch 0 taken 1803097 times.
✓ Branch 1 taken 18 times.
1803115 if (dst < de) *dst++ = 0x20;
5158 }
5159 }
5160 } else {
5161 // Regular PAD SPACE behavior.
5162
4/4
✓ Branch 0 taken 4467250 times.
✓ Branch 1 taken 919 times.
✓ Branch 2 taken 14849 times.
✓ Branch 3 taken 4452401 times.
4468169 for (; dst < de && nweights; nweights--) {
5163 14849 *dst++ = 0x00;
5164
1/2
✓ Branch 0 taken 14849 times.
✗ Branch 1 not taken.
14849 if (dst < de) {
5165 14849 *dst++ = 0x00;
5166
1/2
✓ Branch 0 taken 14849 times.
✗ Branch 1 not taken.
14849 if (dst < de) *dst++ = 0x20;
5167 }
5168 }
5169 }
5170 4510991 return dst - dst0;
5171 }
5172
5173 33808 size_t my_strnxfrmlen_unicode_full_bin(const CHARSET_INFO *cs, size_t len) {
5174 33808 return ((len + 3) / cs->mbmaxlen) * 3;
5175 }
5176
5177 /*
5178 We consider bytes with code more than 127 as a letter.
5179 This guarantees that word boundaries work fine with regular
5180 expressions. Note, there is no need to mark byte 255 as a
5181 letter, it is illegal byte in UTF8.
5182 */
5183 static const uchar ctype_utf8mb3[] = {
5184 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32,
5185 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
5186 32, 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
5187 16, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 16, 16, 16, 16, 16,
5188 16, 16, 129, 129, 129, 129, 129, 129, 1, 1, 1, 1, 1, 1, 1, 1,
5189 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16,
5190 16, 16, 130, 130, 130, 130, 130, 130, 2, 2, 2, 2, 2, 2, 2, 2,
5191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16,
5192 32, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5193 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5194 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5195 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5196 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5197 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5198 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5199 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5200 0};
5201
5202 /* The below are taken from usa7 implementation */
5203
5204 static const uchar to_lower_utf8mb3[] = {
5205 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
5206 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
5207 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
5208 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
5209 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
5210 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
5211 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
5212 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
5213 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
5214 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
5215 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
5216 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
5217 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
5218 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
5219 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
5220 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
5221 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
5222 255};
5223
5224 static const uchar to_upper_utf8mb3[] = {
5225 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
5226 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
5227 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
5228 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
5229 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
5230 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
5231 90, 91, 92, 93, 94, 95, 96, 65, 66, 67, 68, 69, 70, 71, 72,
5232 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
5233 88, 89, 90, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
5234 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
5235 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
5236 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
5237 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
5238 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
5239 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
5240 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
5241 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
5242 255};
5243
5244 995 static inline int bincmp(const uchar *s, const uchar *se, const uchar *t,
5245 const uchar *te) {
5246 995 int slen = (int)(se - s), tlen = (int)(te - t);
5247 995 int len = std::min(slen, tlen);
5248 995 int cmp = memcmp(s, t, len);
5249
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 995 times.
995 return cmp ? cmp : slen - tlen;
5250 }
5251
5252 /*
5253 The same as above, but without range check
5254 for example, for a null-terminated string
5255 */
5256 343433309 static int my_mb_wc_utf8mb3_no_range(my_wc_t *pwc, const uchar *s) {
5257 343433309 return my_mb_wc_utf8_prototype</*RANGE_CHECK=*/false, /*SUPPORT_MB4=*/false>(
5258 343433309 pwc, s, nullptr);
5259 }
5260
5261 extern "C" {
5262 2232497405 static int my_uni_utf8mb3(const CHARSET_INFO *cs [[maybe_unused]], my_wc_t wc,
5263 uchar *r, uchar *e) {
5264 int count;
5265
5266
2/2
✓ Branch 0 taken 264 times.
✓ Branch 1 taken 2232497141 times.
2232497405 if (r >= e) return MY_CS_TOOSMALL;
5267
5268
2/2
✓ Branch 0 taken 2200117059 times.
✓ Branch 1 taken 32380082 times.
2232497141 if (wc < 0x80)
5269 2200117059 count = 1;
5270
2/2
✓ Branch 0 taken 268670 times.
✓ Branch 1 taken 32111412 times.
32380082 else if (wc < 0x800)
5271 268670 count = 2;
5272
2/2
✓ Branch 0 taken 2750145 times.
✓ Branch 1 taken 29361267 times.
32111412 else if (wc < 0x10000)
5273 2750145 count = 3;
5274 else
5275 29361267 return MY_CS_ILUNI;
5276
5277 /*
5278 e is a character after the string r, not the last character of it.
5279 Because of it (r+count > e), not (r+count-1 >e )
5280 */
5281
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2203135868 times.
2203135874 if (r + count > e) return MY_CS_TOOSMALLN(count);
5282
5283
4/4
✓ Branch 0 taken 2750144 times.
✓ Branch 1 taken 268665 times.
✓ Branch 2 taken 2200116987 times.
✓ Branch 3 taken 72 times.
2203135868 switch (count) {
5284 2750144 case 3:
5285 2750144 r[2] = (uchar)(0x80 | (wc & 0x3f));
5286 2750144 wc = wc >> 6;
5287 2750144 wc |= 0x800;
5288 [[fallthrough]];
5289 3018809 case 2:
5290 3018809 r[1] = (uchar)(0x80 | (wc & 0x3f));
5291 3018809 wc = wc >> 6;
5292 3018809 wc |= 0xc0;
5293 [[fallthrough]];
5294 2203135796 case 1:
5295 2203135796 r[0] = (uchar)wc;
5296 }
5297 2203135868 return count;
5298 }
5299 } // extern "C"
5300
5301 /*
5302 The same as above, but without range check.
5303 */
5304 343433329 static int my_uni_utf8mb3_no_range(const CHARSET_INFO *cs [[maybe_unused]],
5305 my_wc_t wc, uchar *r) {
5306 int count;
5307
5308
2/2
✓ Branch 0 taken 343401706 times.
✓ Branch 1 taken 31623 times.
343433329 if (wc < 0x80)
5309 343401706 count = 1;
5310
2/2
✓ Branch 0 taken 2610 times.
✓ Branch 1 taken 29013 times.
31623 else if (wc < 0x800)
5311 2610 count = 2;
5312
1/2
✓ Branch 0 taken 29021 times.
✗ Branch 1 not taken.
29013 else if (wc < 0x10000)
5313 29021 count = 3;
5314 else
5315 return MY_CS_ILUNI;
5316
5317
3/4
✓ Branch 0 taken 29021 times.
✓ Branch 1 taken 2610 times.
✓ Branch 2 taken 343401713 times.
✗ Branch 3 not taken.
343433337 switch (count) {
5318 29021 case 3:
5319 29021 r[2] = (uchar)(0x80 | (wc & 0x3f));
5320 29021 wc = wc >> 6;
5321 29021 wc |= 0x800;
5322 [[fallthrough]];
5323 31631 case 2:
5324 31631 r[1] = (uchar)(0x80 | (wc & 0x3f));
5325 31631 wc = wc >> 6;
5326 31631 wc |= 0xc0;
5327 [[fallthrough]];
5328 343433344 case 1:
5329 343433344 r[0] = (uchar)wc;
5330 }
5331 343433337 return count;
5332 }
5333
5334 309406402 static inline void my_tolower_utf8mb3(const MY_UNICASE_INFO *uni_plane,
5335 my_wc_t *wc) {
5336 const MY_UNICASE_CHARACTER *page;
5337
2/2
✓ Branch 0 taken 309186833 times.
✓ Branch 1 taken 219569 times.
309406402 if ((page = uni_plane->page[(*wc >> 8) & 0xFF]))
5338 309186833 *wc = page[*wc & 0xFF].tolower;
5339 309406402 }
5340
5341 34614686 static inline void my_toupper_utf8mb3(const MY_UNICASE_INFO *uni_plane,
5342 my_wc_t *wc) {
5343 const MY_UNICASE_CHARACTER *page;
5344
2/2
✓ Branch 0 taken 34511221 times.
✓ Branch 1 taken 103465 times.
34614686 if ((page = uni_plane->page[(*wc >> 8) & 0xFF]))
5345 34511221 *wc = page[*wc & 0xFF].toupper;
5346 34614686 }
5347
5348 extern "C" {
5349 245633 static size_t my_caseup_utf8mb3(const CHARSET_INFO *cs, char *src,
5350 size_t srclen, char *dst, size_t dstlen) {
5351 my_wc_t wc;
5352 int srcres, dstres;
5353 245633 char *srcend = src + srclen, *dstend = dst + dstlen, *dst0 = dst;
5354 245633 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5355
3/4
✓ Branch 0 taken 245627 times.
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 245627 times.
245633 assert(src != dst || cs->caseup_multiply == 1);
5356
5357
4/4
✓ Branch 0 taken 127705 times.
✓ Branch 1 taken 245633 times.
✓ Branch 2 taken 127705 times.
✓ Branch 3 taken 245633 times.
501043 while ((src < srcend) &&
5358
2/4
✓ Branch 0 taken 127705 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 127705 times.
✗ Branch 3 not taken.
127705 (srcres = my_mb_wc_utf8mb3(&wc, (uchar *)src, (uchar *)srcend)) > 0) {
5359 127705 my_toupper_utf8mb3(uni_plane, &wc);
5360
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 127705 times.
127705 if ((dstres = my_uni_utf8mb3(cs, wc, (uchar *)dst, (uchar *)dstend)) <= 0)
5361 break;
5362 127705 src += srcres;
5363 127705 dst += dstres;
5364 }
5365 245633 return (size_t)(dst - dst0);
5366 }
5367
5368 74338420 static void my_hash_sort_utf8mb3(const CHARSET_INFO *cs, const uchar *s,
5369 size_t slen, uint64 *n1, uint64 *n2) {
5370 my_wc_t wc;
5371 int res;
5372 74338420 const uchar *e = s + slen;
5373 74338420 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5374 uint64 tmp1;
5375 uint64 tmp2;
5376
5377 /*
5378 Remove end space. We have to do this to be able to compare
5379 'A ' and 'A' as identical
5380 */
5381
4/4
✓ Branch 0 taken 74366736 times.
✓ Branch 1 taken 9804 times.
✓ Branch 2 taken 38120 times.
✓ Branch 3 taken 74328616 times.
74376540 while (e > s && e[-1] == ' ') e--;
5382
5383 74338420 tmp1 = *n1;
5384 74338420 tmp2 = *n2;
5385
5386
6/8
✓ Branch 0 taken 1663498666 times.
✓ Branch 1 taken 74339427 times.
✓ Branch 2 taken 1663499530 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1663500056 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1663500072 times.
✓ Branch 7 taken 74338885 times.
1737838093 while ((s < e) && (res = my_mb_wc_utf8mb3(&wc, s, e)) > 0) {
5387 1663500072 my_tosort_unicode(uni_plane, &wc, cs->state);
5388 1663499673 tmp1 ^= (((tmp1 & 63) + tmp2) * (wc & 0xFF)) + (tmp1 << 8);
5389 1663499673 tmp2 += 3;
5390 1663499673 tmp1 ^= (((tmp1 & 63) + tmp2) * (wc >> 8)) + (tmp1 << 8);
5391 1663499673 tmp2 += 3;
5392 1663499673 s += res;
5393 }
5394
5395 74338885 *n1 = tmp1;
5396 74338885 *n2 = tmp2;
5397 74338885 }
5398
5399 2726996 static size_t my_caseup_str_utf8mb3(const CHARSET_INFO *cs, char *src) {
5400 my_wc_t wc;
5401 int srcres, dstres;
5402 2726996 char *dst = src, *dst0 = src;
5403 2726996 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5404
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2726996 times.
2726996 assert(cs->caseup_multiply == 1);
5405
5406
6/8
✓ Branch 0 taken 34486979 times.
✓ Branch 1 taken 2726995 times.
✓ Branch 2 taken 34486981 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 34486981 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 34486981 times.
✓ Branch 7 taken 2726995 times.
37213974 while (*src && (srcres = my_mb_wc_utf8mb3_no_range(&wc, (uchar *)src)) > 0) {
5407 34486981 my_toupper_utf8mb3(uni_plane, &wc);
5408
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 34486978 times.
34486981 if ((dstres = my_uni_utf8mb3_no_range(cs, wc, (uchar *)dst)) <= 0) break;
5409 34486978 src += srcres;
5410 34486978 dst += dstres;
5411 }
5412 2726995 *dst = '\0';
5413 2726995 return (size_t)(dst - dst0);
5414 }
5415
5416 252368 static size_t my_casedn_utf8mb3(const CHARSET_INFO *cs, char *src,
5417 size_t srclen, char *dst, size_t dstlen) {
5418 my_wc_t wc;
5419 int srcres, dstres;
5420 252368 char *srcend = src + srclen, *dstend = dst + dstlen, *dst0 = dst;
5421 252368 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5422
3/4
✓ Branch 0 taken 252362 times.
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 252362 times.
252368 assert(src != dst || cs->casedn_multiply == 1);
5423
5424
4/4
✓ Branch 0 taken 204181 times.
✓ Branch 1 taken 252368 times.
✓ Branch 2 taken 204181 times.
✓ Branch 3 taken 252368 times.
660730 while ((src < srcend) &&
5425
2/4
✓ Branch 0 taken 204181 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 204181 times.
✗ Branch 3 not taken.
204181 (srcres = my_mb_wc_utf8mb3(&wc, (uchar *)src, (uchar *)srcend)) > 0) {
5426 204181 my_tolower_utf8mb3(uni_plane, &wc);
5427
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 204181 times.
204181 if ((dstres = my_uni_utf8mb3(cs, wc, (uchar *)dst, (uchar *)dstend)) <= 0)
5428 break;
5429 204181 src += srcres;
5430 204181 dst += dstres;
5431 }
5432 252368 return (size_t)(dst - dst0);
5433 }
5434
5435 26198452 static size_t my_casedn_str_utf8mb3(const CHARSET_INFO *cs, char *src) {
5436 my_wc_t wc;
5437 int srcres, dstres;
5438 26198452 char *dst = src, *dst0 = src;
5439 26198452 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5440
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26198452 times.
26198452 assert(cs->casedn_multiply == 1);
5441
5442
6/8
✓ Branch 0 taken 308946359 times.
✓ Branch 1 taken 26198444 times.
✓ Branch 2 taken 308946345 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 308946345 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 308946350 times.
✓ Branch 7 taken 26198439 times.
335144803 while (*src && (srcres = my_mb_wc_utf8mb3_no_range(&wc, (uchar *)src)) > 0) {
5443 308946350 my_tolower_utf8mb3(uni_plane, &wc);
5444
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 308946351 times.
308946343 if ((dstres = my_uni_utf8mb3_no_range(cs, wc, (uchar *)dst)) <= 0) break;
5445 308946351 src += srcres;
5446 308946351 dst += dstres;
5447 }
5448
5449 /*
5450 In rare cases lower string can be shorter than
5451 the original string, for example:
5452
5453 "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
5454 (which is 0xC4B0 in utf8, i.e. two bytes)
5455
5456 is converted into
5457
5458 "U+0069 LATIN SMALL LETTER I"
5459 (which is 0x69 in utf8, i.e. one byte)
5460
5461 So, we need to put '\0' terminator after converting.
5462 */
5463
5464 26198439 *dst = '\0';
5465 26198439 return (size_t)(dst - dst0);
5466 }
5467
5468 42630088 static int my_strnncoll_utf8mb3(const CHARSET_INFO *cs, const uchar *s,
5469 size_t slen, const uchar *t, size_t tlen,
5470 bool t_is_prefix) {
5471 int s_res, t_res;
5472 42630088 my_wc_t s_wc = 0, t_wc = 0;
5473 42630088 const uchar *se = s + slen;
5474 42630088 const uchar *te = t + tlen;
5475 42630088 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5476
5477
4/4
✓ Branch 0 taken 339225056 times.
✓ Branch 1 taken 24030236 times.
✓ Branch 2 taken 339104962 times.
✓ Branch 3 taken 120094 times.
363255292 while (s < se && t < te) {
5478
1/2
✓ Branch 0 taken 339104760 times.
✗ Branch 1 not taken.
339104962 s_res = my_mb_wc_utf8mb3(&s_wc, s, se);
5479
1/2
✓ Branch 0 taken 339105034 times.
✗ Branch 1 not taken.
339104760 t_res = my_mb_wc_utf8mb3(&t_wc, t, te);
5480
5481
3/4
✓ Branch 0 taken 339105018 times.
✓ Branch 1 taken 16 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 339105025 times.
339105034 if (s_res <= 0 || t_res <= 0) {
5482 /* Incorrect string, compare byte by byte value */
5483
1/2
✓ Branch 0 taken 31 times.
✗ Branch 1 not taken.
9 return bincmp(s, se, t, te);
5484 }
5485
5486 339105025 my_tosort_unicode(uni_plane, &s_wc, cs->state);
5487 339104989 my_tosort_unicode(uni_plane, &t_wc, cs->state);
5488
5489
2/2
✓ Branch 0 taken 18479772 times.
✓ Branch 1 taken 320625204 times.
339104976 if (s_wc != t_wc) {
5490
2/2
✓ Branch 0 taken 6819982 times.
✓ Branch 1 taken 11659790 times.
18479772 return s_wc > t_wc ? 1 : -1;
5491 }
5492
5493 320625204 s += s_res;
5494 320625204 t += t_res;
5495 }
5496
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 24150230 times.
24150330 return (int)(t_is_prefix ? t - te : ((se - s) - (te - t)));
5497 }
5498
5499 /*
5500 Compare strings, discarding end space
5501
5502 SYNOPSIS
5503 my_strnncollsp_utf8mb3()
5504 cs character set handler
5505 a First string to compare
5506 a_length Length of 'a'
5507 b Second string to compare
5508 b_length Length of 'b'
5509
5510 IMPLEMENTATION
5511 If one string is shorter as the other, then we space extend the other
5512 so that the strings have equal length.
5513
5514 This will ensure that the following things hold:
5515
5516 "a" == "a "
5517 "a\0" < "a"
5518 "a\0" < "a "
5519
5520 RETURN
5521 < 0 a < b
5522 = 0 a == b
5523 > 0 a > b
5524 */
5525
5526 596989223 static int my_strnncollsp_utf8mb3(const CHARSET_INFO *cs, const uchar *s,
5527 size_t slen, const uchar *t, size_t tlen) {
5528 int s_res, t_res, res;
5529 596989223 my_wc_t s_wc = 0, t_wc = 0;
5530 596989223 const uchar *se = s + slen, *te = t + tlen;
5531 596989223 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5532
5533
4/4
✓ Branch 0 taken 5453059026 times.
✓ Branch 1 taken 295521171 times.
✓ Branch 2 taken 5447944543 times.
✓ Branch 3 taken 5114483 times.
5748580197 while (s < se && t < te) {
5534
1/2
✓ Branch 0 taken 5447944624 times.
✗ Branch 1 not taken.
5447944543 s_res = my_mb_wc_utf8mb3(&s_wc, s, se);
5535
1/2
✓ Branch 0 taken 5447943313 times.
✗ Branch 1 not taken.
5447944624 t_res = my_mb_wc_utf8mb3(&t_wc, t, te);
5536
5537
3/4
✓ Branch 0 taken 5447945273 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 689 times.
✓ Branch 3 taken 5447944584 times.
5447943313 if (s_res <= 0 || t_res <= 0) {
5538 /* Incorrect string, compare byte by byte value */
5539 return bincmp(s, se, t, te);
5540 }
5541
5542 5447944584 my_tosort_unicode(uni_plane, &s_wc, cs->state);
5543 5447939974 my_tosort_unicode(uni_plane, &t_wc, cs->state);
5544
5545
2/2
✓ Branch 0 taken 296359132 times.
✓ Branch 1 taken 5151590974 times.
5447950106 if (s_wc != t_wc) {
5546
2/2
✓ Branch 0 taken 102799802 times.
✓ Branch 1 taken 193559330 times.
296359132 return s_wc > t_wc ? 1 : -1;
5547 }
5548
5549 5151590974 s += s_res;
5550 5151590974 t += t_res;
5551 }
5552
5553 300635654 slen = (size_t)(se - s);
5554 300635654 tlen = (size_t)(te - t);
5555 300635654 res = 0;
5556
5557
2/2
✓ Branch 0 taken 14492959 times.
✓ Branch 1 taken 286142695 times.
300635654 if (slen != tlen) {
5558 14492959 int swap = 1;
5559
2/2
✓ Branch 0 taken 9376730 times.
✓ Branch 1 taken 5116229 times.
14492959 if (slen < tlen) {
5560 9376730 slen = tlen;
5561 9376730 s = t;
5562 9376730 se = te;
5563 9376730 swap = -1;
5564 9376730 res = -res;
5565 }
5566 /*
5567 This following loop uses the fact that in UTF-8
5568 all multibyte characters are greater than space,
5569 and all multibyte head characters are greater than
5570 space. It means if we meet a character greater
5571 than space, it always means that the longer string
5572 is greater. So we can reuse the same loop from the
5573 8bit version, without having to process full multibyte
5574 sequences.
5575 */
5576
2/2
✓ Branch 0 taken 19859291 times.
✓ Branch 1 taken 2120 times.
19861411 for (; s < se; s++) {
5577
4/4
✓ Branch 0 taken 14490839 times.
✓ Branch 1 taken 5368452 times.
✓ Branch 2 taken 29 times.
✓ Branch 3 taken 14490810 times.
19859291 if (*s != ' ') return (*s < ' ') ? -swap : swap;
5578 }
5579 }
5580 286144815 return res;
5581 }
5582
5583 /*
5584 Compare 0-terminated UTF8 strings.
5585
5586 SYNOPSIS
5587 my_strcasecmp_utf8mb3()
5588 cs character set handler
5589 s First 0-terminated string to compare
5590 t Second 0-terminated string to compare
5591
5592 IMPLEMENTATION
5593
5594 RETURN
5595 - negative number if s < t
5596 - positive number if s > t
5597 - 0 is the strings are equal
5598 */
5599
5600 3101386776 static int my_strcasecmp_utf8mb3(const CHARSET_INFO *cs, const char *s,
5601 const char *t) {
5602 3101386776 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5603
4/4
✓ Branch 0 taken 19737327139 times.
✓ Branch 1 taken 722423263 times.
✓ Branch 2 taken 19731555528 times.
✓ Branch 3 taken 5771611 times.
20459750402 while (s[0] && t[0]) {
5604 my_wc_t s_wc, t_wc;
5605
5606
2/2
✓ Branch 0 taken 19731422009 times.
✓ Branch 1 taken 133519 times.
19731555528 if ((uchar)s[0] < 128) {
5607 /*
5608 s[0] is between 0 and 127.
5609 It represents a single byte character.
5610 Convert it into weight according to collation.
5611 */
5612 19731422009 s_wc = plane00[(uchar)s[0]].tolower;
5613 19731422009 s++;
5614 } else {
5615 int res;
5616
5617 /*
5618 Scan a multibyte character.
5619
5620 In the future it is worth to write a special version of
5621 my_mb_wc_utf8mb3() for 0-terminated strings which will not
5622 take in account length. Now we call the regular version of
5623 my_mb_wc_utf8mb3() with s+3 in the last argument. s+3 is enough
5624 to scan any multibyte sequence.
5625
5626 Calling the regular version of my_mb_wc_utf8mb3 is safe for
5627 0-terminated strings: we will never lose the end of the
5628 string: If we have 0 character in the middle of a multibyte
5629 sequence, then my_mb_wc_utf8mb3 will always return a negative
5630 number, so the loop with finish.
5631 */
5632
5633
1/2
✓ Branch 0 taken 133519 times.
✗ Branch 1 not taken.
133519 res = my_mb_wc_utf8mb3(&s_wc, (const uchar *)s, (const uchar *)s + 3);
5634
5635 /*
5636 In the case of wrong multibyte sequence we will
5637 call strcmp() for byte-to-byte comparison.
5638 */
5639
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 133519 times.
2373333175 if (res <= 0) return strcmp(s, t);
5640 133519 s += res;
5641
5642 /* Convert Unicode code into weight according to collation */
5643 133519 my_tolower_utf8mb3(uni_plane, &s_wc);
5644 }
5645
5646 /* Do the same for the second string */
5647
5648
2/2
✓ Branch 0 taken 19731434086 times.
✓ Branch 1 taken 122375 times.
19731556461 if ((uchar)t[0] < 128) {
5649 /* Convert single byte character into weight */
5650 19731434086 t_wc = plane00[(uchar)t[0]].tolower;
5651 19731434086 t++;
5652 } else {
5653
1/2
✓ Branch 0 taken 122375 times.
✗ Branch 1 not taken.
122375 int res = my_mb_wc_utf8mb3(&t_wc, (const uchar *)t, (const uchar *)t + 3);
5654
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 122375 times.
122375 if (res <= 0) return strcmp(s, t);
5655 122375 t += res;
5656
5657 /* Convert code into weight */
5658 122375 my_tolower_utf8mb3(uni_plane, &t_wc);
5659 }
5660
5661 /* Now we have two weights, let's compare them */
5662
2/2
✓ Branch 0 taken 2373199656 times.
✓ Branch 1 taken 17358363626 times.
19731563282 if (s_wc != t_wc) return ((int)s_wc) - ((int)t_wc);
5663 }
5664 728194874 return ((int)(uchar)s[0]) - ((int)(uchar)t[0]);
5665 }
5666
5667 1067020 static int my_wildcmp_utf8mb3(const CHARSET_INFO *cs, const char *str,
5668 const char *str_end, const char *wildstr,
5669 const char *wildend, int escape, int w_one,
5670 int w_many) {
5671 1067020 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5672 1067020 return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, escape, w_one,
5673 1067020 w_many, uni_plane);
5674 }
5675
5676 1800959 static size_t my_strnxfrmlen_utf8mb3(const CHARSET_INFO *cs [[maybe_unused]],
5677 size_t len) {
5678 // We really ought to have len % 3 == 0, but not all calling code conforms.
5679 1800959 return ((len + 2) / 3) * 2;
5680 }
5681 } // extern "C"
5682
5683 extern "C" {
5684 310326212 static size_t my_well_formed_len_utf8mb3(const CHARSET_INFO *, const char *b,
5685 const char *e, size_t pos,
5686 int *error) {
5687 310326212 const char *b_start = b;
5688 310326212 *error = 0;
5689
2/2
✓ Branch 0 taken 5698282739 times.
✓ Branch 1 taken 135840501 times.
5834123240 while (pos) {
5690 int mb_len;
5691
5692 5698282739 if ((mb_len = my_valid_mbcharlen_utf8mb3(pointer_cast<const uchar *>(b),
5693
2/2
✓ Branch 0 taken 174485413 times.
✓ Branch 1 taken 5523797028 times.
5698282441 pointer_cast<const uchar *>(e))) <=
5694 0) {
5695
2/2
✓ Branch 0 taken 351 times.
✓ Branch 1 taken 174485062 times.
174485413 *error = b < e ? 1 : 0;
5696 174485413 break;
5697 }
5698 5523797028 b += mb_len;
5699 5523797028 pos--;
5700 }
5701 310325914 return (size_t)(b - b_start);
5702 }
5703
5704 2869252064 static uint my_ismbchar_utf8mb3(const CHARSET_INFO *, const char *b,
5705 const char *e) {
5706 2869252064 int res = my_valid_mbcharlen_utf8mb3((const uchar *)b, (const uchar *)e);
5707
2/2
✓ Branch 0 taken 44880630 times.
✓ Branch 1 taken 2824372003 times.
2869252633 return (res > 1) ? res : 0;
5708 }
5709
5710 1361761085 static uint my_mbcharlen_utf8mb3(const CHARSET_INFO *cs [[maybe_unused]],
5711 uint c) {
5712
2/2
✓ Branch 0 taken 1326004063 times.
✓ Branch 1 taken 35757022 times.
1361761085 if (c < 0x80)
5713 1326004063 return 1;
5714
2/2
✓ Branch 0 taken 18096278 times.
✓ Branch 1 taken 17660744 times.
35757022 else if (c < 0xc2)
5715 18096278 return 0; /* Illegal mb head */
5716
2/2
✓ Branch 0 taken 8487190 times.
✓ Branch 1 taken 9173554 times.
17660744 else if (c < 0xe0)
5717 8487190 return 2;
5718
2/2
✓ Branch 0 taken 4514132 times.
✓ Branch 1 taken 4659422 times.
9173554 else if (c < 0xf0)
5719 4514132 return 3;
5720 4659422 return 0; /* Illegal mb head */
5721 ;
5722 }
5723 } // extern "C"
5724
5725 static MY_COLLATION_HANDLER my_collation_utf8_general_ci_handler = {
5726 nullptr, /* init */
5727 nullptr,
5728 my_strnncoll_utf8mb3,
5729 my_strnncollsp_utf8mb3,
5730 my_strnxfrm_unicode,
5731 my_strnxfrmlen_utf8mb3,
5732 my_like_range_mb,
5733 my_wildcmp_utf8mb3,
5734 my_strcasecmp_utf8mb3,
5735 my_instr_mb,
5736 my_hash_sort_utf8mb3,
5737 my_propagate_complex};
5738
5739 static MY_COLLATION_HANDLER my_collation_utf8_bin_handler = {
5740 nullptr, /* init */
5741 nullptr,
5742 my_strnncoll_mb_bin,
5743 my_strnncollsp_mb_bin,
5744 my_strnxfrm_unicode,
5745 my_strnxfrmlen_utf8mb3,
5746 my_like_range_mb,
5747 my_wildcmp_mb_bin,
5748 my_strcasecmp_mb_bin,
5749 my_instr_mb,
5750 my_hash_sort_mb_bin,
5751 my_propagate_simple};
5752
5753 MY_CHARSET_HANDLER my_charset_utf8_handler = {nullptr, /* init */
5754 my_ismbchar_utf8mb3,
5755 my_mbcharlen_utf8mb3,
5756 my_numchars_mb,
5757 my_charpos_mb3,
5758 my_well_formed_len_utf8mb3,
5759 my_lengthsp_8bit,
5760 my_numcells_mb,
5761 my_mb_wc_utf8mb3_thunk,
5762 my_uni_utf8mb3,
5763 my_mb_ctype_mb,
5764 my_caseup_str_utf8mb3,
5765 my_casedn_str_utf8mb3,
5766 my_caseup_utf8mb3,
5767 my_casedn_utf8mb3,
5768 my_snprintf_8bit,
5769 my_long10_to_str_8bit,
5770 my_longlong10_to_str_8bit,
5771 my_fill_8bit,
5772 my_strntol_8bit,
5773 my_strntoul_8bit,
5774 my_strntoll_8bit,
5775 my_strntoull_8bit,
5776 my_strntod_8bit,
5777 my_strtoll10_8bit,
5778 my_strntoull10rnd_8bit,
5779 my_scan_8bit};
5780
5781 CHARSET_INFO my_charset_utf8_general_ci = {
5782 33,
5783 0,
5784 0, /* number */
5785 MY_CS_COMPILED | MY_CS_PRIMARY | MY_CS_STRNXFRM | MY_CS_UNICODE, /* state */
5786 "utf8mb3", /* cs name */
5787 "utf8mb3_general_ci", /* m_coll_name */
5788 "UTF-8 Unicode", /* comment */
5789 nullptr, /* tailoring */
5790 nullptr, /* coll_param */
5791 ctype_utf8mb3, /* ctype */
5792 to_lower_utf8mb3, /* to_lower */
5793 to_upper_utf8mb3, /* to_upper */
5794 to_upper_utf8mb3, /* sort_order */
5795 nullptr, /* uca */
5796 nullptr, /* tab_to_uni */
5797 nullptr, /* tab_from_uni */
5798 &my_unicase_default, /* caseinfo */
5799 nullptr, /* state_map */
5800 nullptr, /* ident_map */
5801 1, /* strxfrm_multiply */
5802 1, /* caseup_multiply */
5803 1, /* casedn_multiply */
5804 1, /* mbminlen */
5805 3, /* mbmaxlen */
5806 1, /* mbmaxlenlen */
5807 0, /* min_sort_char */
5808 0xFFFF, /* max_sort_char */
5809 ' ', /* pad char */
5810 false, /* escape_with_backslash_is_dangerous */
5811 1, /* levels_for_compare */
5812 &my_charset_utf8_handler,
5813 &my_collation_utf8_general_ci_handler,
5814 PAD_SPACE};
5815
5816 CHARSET_INFO my_charset_utf8_tolower_ci = {
5817 76,
5818 0,
5819 0, /* number */
5820 MY_CS_COMPILED | MY_CS_STRNXFRM | MY_CS_UNICODE | MY_CS_LOWER_SORT,
5821 "utf8mb3", /* cs name */
5822 "utf8mb3_tolower_ci", /* m_coll_name */
5823 "UTF-8 Unicode", /* comment */
5824 nullptr, /* tailoring */
5825 nullptr, /* coll_param */
5826 ctype_utf8mb3, /* ctype */
5827 to_lower_utf8mb3, /* to_lower */
5828 to_upper_utf8mb3, /* to_upper */
5829 to_upper_utf8mb3, /* sort_order */
5830 nullptr, /* uca */
5831 nullptr, /* tab_to_uni */
5832 nullptr, /* tab_from_uni */
5833 &my_unicase_default, /* caseinfo */
5834 nullptr, /* state_map */
5835 nullptr, /* ident_map */
5836 1, /* strxfrm_multiply */
5837 1, /* caseup_multiply */
5838 1, /* casedn_multiply */
5839 1, /* mbminlen */
5840 3, /* mbmaxlen */
5841 1, /* mbmaxlenlen */
5842 0, /* min_sort_char */
5843 0xFFFF, /* max_sort_char */
5844 ' ', /* pad char */
5845 false, /* escape_with_backslash_is_dangerous */
5846 1, /* levels_for_compare */
5847 &my_charset_utf8_handler,
5848 &my_collation_utf8_general_ci_handler,
5849 PAD_SPACE};
5850
5851 CHARSET_INFO my_charset_utf8_general_mysql500_ci = {
5852 223,
5853 0,
5854 0, /* number */
5855 MY_CS_COMPILED | MY_CS_STRNXFRM | MY_CS_UNICODE, /* state */
5856 "utf8mb3", /* cs name */
5857 "utf8mb3_general_mysql500_ci", /* m_coll_name */
5858 "UTF-8 Unicode", /* comment */
5859 nullptr, /* tailoring */
5860 nullptr, /* coll_param */
5861 ctype_utf8mb3, /* ctype */
5862 to_lower_utf8mb3, /* to_lower */
5863 to_upper_utf8mb3, /* to_upper */
5864 to_upper_utf8mb3, /* sort_order */
5865 nullptr, /* uca */
5866 nullptr, /* tab_to_uni */
5867 nullptr, /* tab_from_uni */
5868 &my_unicase_mysql500, /* caseinfo */
5869 nullptr, /* state_map */
5870 nullptr, /* ident_map */
5871 1, /* strxfrm_multiply */
5872 1, /* caseup_multiply */
5873 1, /* casedn_multiply */
5874 1, /* mbminlen */
5875 3, /* mbmaxlen */
5876 1, /* mbmaxlenlen */
5877 0, /* min_sort_char */
5878 0xFFFF, /* max_sort_char */
5879 ' ', /* pad char */
5880 false, /* escape_with_backslash_is_dangerous */
5881 1, /* levels_for_compare */
5882 &my_charset_utf8_handler,
5883 &my_collation_utf8_general_ci_handler,
5884 PAD_SPACE};
5885
5886 CHARSET_INFO my_charset_utf8_bin = {
5887 83,
5888 0,
5889 0, /* number */
5890 MY_CS_COMPILED | MY_CS_BINSORT | MY_CS_STRNXFRM | MY_CS_UNICODE, /* state */
5891 "utf8mb3", /* cs name */
5892 "utf8mb3_bin", /* m_coll_name */
5893 "UTF-8 Unicode", /* comment */
5894 nullptr, /* tailoring */
5895 nullptr, /* coll_param */
5896 ctype_utf8mb3, /* ctype */
5897 to_lower_utf8mb3, /* to_lower */
5898 to_upper_utf8mb3, /* to_upper */
5899 nullptr, /* sort_order */
5900 nullptr, /* uca */
5901 nullptr, /* tab_to_uni */
5902 nullptr, /* tab_from_uni */
5903 &my_unicase_default, /* caseinfo */
5904 nullptr, /* state_map */
5905 nullptr, /* ident_map */
5906 1, /* strxfrm_multiply */
5907 1, /* caseup_multiply */
5908 1, /* casedn_multiply */
5909 1, /* mbminlen */
5910 3, /* mbmaxlen */
5911 1, /* mbmaxlenlen */
5912 0, /* min_sort_char */
5913 0xFFFF, /* max_sort_char */
5914 ' ', /* pad char */
5915 false, /* escape_with_backslash_is_dangerous */
5916 1, /* levels_for_compare */
5917 &my_charset_utf8_handler,
5918 &my_collation_utf8_bin_handler,
5919 PAD_SPACE};
5920
5921 /*
5922 File system encoding components:
5923
5924 Code range Pattern Number Used Unused Blocks
5925 -----------------------------------------------------------------------------
5926 00C0..017F [.][0..4][g..z] 5*20= 100 97 3 Latin1 Supplement + Ext A
5927 0370..03FF [.][5..9][g..z] 5*20= 100 88 12 Greek + Coptic
5928 0400..052F [.][g..z][0..6] 20*7= 140 140 137 Cyrillic
5929 0530..058F [.][g..z][7..8] 20*2= 40 38 2 Armenian
5930 2160..217F [.][g..z][9] 20*1= 20 16 4 Number Forms
5931 0180..02AF [.][g..z][a..k] 28*11=220 203 17 Latin Ext B + IPA
5932 1E00..0EFF [.][g..z][l..r] 20*7= 140 136 4 Latin Additional Extended
5933 1F00..1FFF [.][g..z][s..z] 20*8= 160 144 16 Greek Extended
5934 .... .... [.][a..f][g..z] 6*20= 120 0 120 RESERVED
5935 24B6..24E9 [.][@][a..z] 26 26 0 Enclosed Alphanumerics
5936 FF21..FF5A [.][a..z][@] 26 26 0 Full Width forms
5937
5938 All other characters are encoded using five bytes:
5939
5940 [.][0..9a..z][0..9a..z][0..9a..z][0..9a..z]
5941
5942 */
5943
5944 static const uint16 touni[5994] = {
5945 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5946 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5947 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C1, 0x00C2, 0x00C3,
5948 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC,
5949 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x0000, 0x0000,
5950 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5951 0x0000, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
5952 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0,
5953 0x00F1, 0x00F2, 0x00F3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5954 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5955 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5956 0x0000, 0x0000, 0x0000, 0x0000, 0x00D4, 0x00D5, 0x00D6, 0x0000, 0x00D8,
5957 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x0178, 0x0100, 0x0102,
5958 0x0104, 0x0106, 0x0108, 0x010A, 0x010C, 0x010E, 0x0000, 0x0000, 0x0000,
5959 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5960 0x00F4, 0x00F5, 0x00F6, 0x00DF, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC,
5961 0x00FD, 0x00FE, 0x00FF, 0x0101, 0x0103, 0x0105, 0x0107, 0x0109, 0x010B,
5962 0x010D, 0x010F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5963 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5964 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5965 0x0000, 0x0000, 0x0000, 0x0110, 0x0112, 0x0114, 0x0116, 0x0118, 0x011A,
5966 0x011C, 0x011E, 0x0120, 0x0122, 0x0124, 0x0126, 0x0128, 0x012A, 0x012C,
5967 0x012E, 0x0000, 0x0132, 0x0134, 0x0136, 0x0000, 0x0000, 0x0000, 0x0000,
5968 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0111,
5969 0x0113, 0x0115, 0x0117, 0x0119, 0x011B, 0x011D, 0x011F, 0x0121, 0x0123,
5970 0x0125, 0x0127, 0x0129, 0x012B, 0x012D, 0x012F, 0x0131, 0x0133, 0x0135,
5971 0x0137, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5972 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5973 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5974 0x0000, 0x0000, 0x0000, 0x0139, 0x013B, 0x013D, 0x013F, 0x0141, 0x0143,
5975 0x0145, 0x0147, 0x0000, 0x014A, 0x014C, 0x014E, 0x0150, 0x0152, 0x0154,
5976 0x0156, 0x0158, 0x015A, 0x015C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5977 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0138, 0x013A,
5978 0x013C, 0x013E, 0x0140, 0x0142, 0x0144, 0x0146, 0x0148, 0x0149, 0x014B,
5979 0x014D, 0x014F, 0x0151, 0x0153, 0x0155, 0x0157, 0x0159, 0x015B, 0x015D,
5980 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5981 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5982 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5983 0x0000, 0x015E, 0x0160, 0x0162, 0x0164, 0x0166, 0x0168, 0x016A, 0x016C,
5984 0x016E, 0x0170, 0x0172, 0x0174, 0x0176, 0x0179, 0x017B, 0x017D, 0x0000,
5985 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5986 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x015F, 0x0161, 0x0163,
5987 0x0165, 0x0167, 0x0169, 0x016B, 0x016D, 0x016F, 0x0171, 0x0173, 0x0175,
5988 0x0177, 0x017A, 0x017C, 0x017E, 0x017F, 0x0000, 0x0000, 0x0000, 0x0000,
5989 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5990 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5991 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5992 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5993 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5994 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5995 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5996 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5997 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0390, 0x0000, 0x0000, 0x0000,
5998 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5999 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6000 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0386,
6001 0x0388, 0x0389, 0x038A, 0x0000, 0x0391, 0x0000, 0x0393, 0x0394, 0x0395,
6002 0x0396, 0x0397, 0x0000, 0x0399, 0x0000, 0x039B, 0x039C, 0x039D, 0x039E,
6003 0x039F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6004 0x0000, 0x0000, 0x0000, 0x0000, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 0x03B0,
6005 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9,
6006 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x0000, 0x0000, 0x0000,
6007 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6008 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6009 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03A1,
6010 0x0000, 0x0000, 0x03A4, 0x03A5, 0x0000, 0x03A7, 0x03A8, 0x03A9, 0x03AA,
6011 0x03AB, 0x038C, 0x038E, 0x038F, 0x0000, 0x0392, 0x0398, 0x03D2, 0x03D3,
6012 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6013 0x0000, 0x0000, 0x0000, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5,
6014 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE,
6015 0x0000, 0x03D0, 0x03D1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6016 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6017 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6018 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D4, 0x03A6, 0x03A0,
6019 0x0000, 0x0000, 0x03DA, 0x03DC, 0x03DE, 0x03E0, 0x03E2, 0x03E4, 0x03E6,
6020 0x03E8, 0x03EA, 0x03EC, 0x03EE, 0x039A, 0x0000, 0x03A3, 0x0000, 0x0000,
6021 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6022 0x0000, 0x0000, 0x0000, 0x03D5, 0x03D6, 0x03D7, 0x03D9, 0x03DB, 0x03DD,
6023 0x03DF, 0x03E1, 0x03E3, 0x03E5, 0x03E7, 0x03E9, 0x03EB, 0x03ED, 0x03EF,
6024 0x03F0, 0x03F1, 0x03F2, 0x03F3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6025 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6026 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6027 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6028 0x0000, 0x03FD, 0x03FE, 0x03FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6029 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6030 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6031 0x0000, 0x03F5, 0x03F6, 0x03F8, 0x03FB, 0x03FC, 0x0000, 0x0000, 0x0000,
6032 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6033 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6034 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6035 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6036 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6037 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6038 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6039 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6040 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6041 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6042 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6043 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6044 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6045 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6046 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6047 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6048 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6049 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6050 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6051 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6052 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6053 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6054 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6055 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6056 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6057 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6058 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6059 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6060 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6061 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6062 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6063 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6064 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6065 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6066 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6067 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6068 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6069 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6070 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6071 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6072 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6073 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6074 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6075 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6076 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6077 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6078 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6079 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6080 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6081 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6082 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6083 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6084 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6085 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6086 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6087 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6088 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6089 0x0000, 0x24B6, 0x24B7, 0x24B8, 0x24B9, 0x24BA, 0x24BB, 0x24BC, 0x24BD,
6090 0x24BE, 0x24BF, 0x24C0, 0x24C1, 0x24C2, 0x24C3, 0x24C4, 0x24C5, 0x24C6,
6091 0x24C7, 0x24C8, 0x24C9, 0x24CA, 0x24CB, 0x24CC, 0x24CD, 0x24CE, 0x24CF,
6092 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x24D0, 0x24D1, 0x24D2,
6093 0x24D3, 0x24D4, 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, 0x24DB,
6094 0x24DC, 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, 0x24E3, 0x24E4,
6095 0x24E5, 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x0000, 0x0000, 0x0000, 0x0000,
6096 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6097 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF21,
6098 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6099 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6100 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6101 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6102 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6103 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6104 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6105 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6106 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF22, 0x0000,
6107 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6108 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6109 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6110 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6111 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6112 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6113 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6114 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6115 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF23, 0x0000, 0x0000,
6116 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6117 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6118 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6119 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6120 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6121 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6122 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6123 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6124 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF24, 0x0000, 0x0000, 0x0000,
6125 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6126 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6127 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6128 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6129 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6130 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6131 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6132 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6133 0x0000, 0x0000, 0x0000, 0x0000, 0xFF25, 0x0000, 0x0000, 0x0000, 0x0000,
6134 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6135 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6136 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6137 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6138 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6139 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6140 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6141 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6142 0x0000, 0x0000, 0x0000, 0xFF26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6143 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6144 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6145 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6146 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6147 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6148 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6149 0x0000, 0x0000, 0x0000, 0x0000, 0x0410, 0x0424, 0x0408, 0x0478, 0x04A6,
6150 0x04CD, 0x04F4, 0x0000, 0x0544, 0x2160, 0x0000, 0x0000, 0x0000, 0x0000,
6151 0x0000, 0x0000, 0xFF27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6152 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6153 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6154 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6155 0x01B3, 0x01DE, 0x0208, 0x0230, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6156 0x0000, 0x1E00, 0x1E28, 0x1E50, 0x1E78, 0x1E60, 0x1EBE, 0x1EE6, 0x1F08,
6157 0x1F2A, 0x0000, 0x1F6C, 0x1F88, 0x1FAC, 0x0000, 0x0000, 0x0000, 0x0000,
6158 0x0000, 0x0000, 0x0000, 0x0411, 0x0425, 0x0409, 0x047A, 0x04A8, 0x0000,
6159 0x04F6, 0x0531, 0x0545, 0x2161, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6160 0x0000, 0xFF28, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6161 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6162 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6163 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0x01B5,
6164 0x01E0, 0x020A, 0x0232, 0x0000, 0x0000, 0x019D, 0x0000, 0x0000, 0x0000,
6165 0x1E02, 0x1E2A, 0x1E52, 0x1E7A, 0x0000, 0x1EC0, 0x1EE8, 0x1F09, 0x1F2B,
6166 0x0000, 0x1F6D, 0x1F89, 0x1FAD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6167 0x0000, 0x0000, 0x0412, 0x0426, 0x040A, 0x047C, 0x04AA, 0x04D0, 0x04F8,
6168 0x0532, 0x0546, 0x2162, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6169 0xFF29, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6170 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6171 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6172 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0184, 0x01B8, 0x01E2,
6173 0x020C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E04,
6174 0x1E2C, 0x1E54, 0x1E7C, 0x0000, 0x1EC2, 0x1EEA, 0x1F0A, 0x1F2C, 0x0000,
6175 0x1F6E, 0x1F8A, 0x1FAE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6176 0x0000, 0x0413, 0x0427, 0x040B, 0x047E, 0x04AC, 0x04D2, 0x0000, 0x0533,
6177 0x0547, 0x2163, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2A,
6178 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6179 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6180 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6181 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0187, 0x0000, 0x01E4, 0x020E,
6182 0x0000, 0x0000, 0x0193, 0x0000, 0x01AE, 0x0000, 0x0000, 0x1E06, 0x1E2E,
6183 0x1E56, 0x1E7E, 0x0000, 0x1EC4, 0x1EEC, 0x1F0B, 0x1F2D, 0x0000, 0x1F6F,
6184 0x1F8B, 0x1FAF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6185 0x0414, 0x0428, 0x040C, 0x0480, 0x04AE, 0x04D4, 0x0000, 0x0534, 0x0548,
6186 0x2164, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2B, 0x0000,
6187 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6188 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6189 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6190 0x0000, 0x0000, 0x0000, 0x0000, 0x018B, 0x0000, 0x01E6, 0x0210, 0x0000,
6191 0x0000, 0x0000, 0x019F, 0x0000, 0x0000, 0x0000, 0x1E08, 0x1E30, 0x1E58,
6192 0x1E80, 0x0000, 0x1EC6, 0x1EEE, 0x1F0C, 0x1F2E, 0x0000, 0x1FBA, 0x1F8C,
6193 0x1FB8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0415,
6194 0x0429, 0x040D, 0x0000, 0x04B0, 0x04D6, 0x0000, 0x0535, 0x0549, 0x2165,
6195 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2C, 0x0000, 0x0000,
6196 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6197 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6198 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6199 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01E8, 0x0212, 0x0000, 0x0000,
6200 0x0000, 0x0000, 0x01B1, 0x0000, 0x0000, 0x1E0A, 0x1E32, 0x1E5A, 0x1E82,
6201 0x1EA0, 0x1EC8, 0x1EF0, 0x1F0D, 0x1F2F, 0x1F59, 0x1FBB, 0x1F8D, 0x1FB9,
6202 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0416, 0x042A,
6203 0x040E, 0x048A, 0x04B2, 0x04D8, 0x0000, 0x0536, 0x054A, 0x2166, 0x0000,
6204 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2D, 0x0000, 0x0000, 0x0000,
6205 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6206 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6207 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6208 0x0000, 0x0000, 0x0191, 0x0000, 0x01EA, 0x0214, 0x0000, 0x0000, 0x0194,
6209 0x0000, 0x01B2, 0x0000, 0x0000, 0x1E0C, 0x1E34, 0x1E5C, 0x1E84, 0x1EA2,
6210 0x1ECA, 0x1EF2, 0x1F0E, 0x1F38, 0x0000, 0x1FC8, 0x1F8E, 0x0000, 0x0000,
6211 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0417, 0x042B, 0x040F,
6212 0x048C, 0x04B4, 0x04DA, 0x0000, 0x0537, 0x054B, 0x2167, 0x0000, 0x0000,
6213 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2E, 0x0000, 0x0000, 0x0000, 0x0000,
6214 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6215 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6216 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6217 0x0000, 0x01F6, 0x01BC, 0x01EC, 0x0216, 0x0000, 0x0000, 0x0000, 0x0000,
6218 0x0000, 0x0000, 0x0000, 0x1E0E, 0x1E36, 0x1E5E, 0x1E86, 0x1EA4, 0x1ECC,
6219 0x1EF4, 0x1F0F, 0x1F39, 0x1F5B, 0x1FC9, 0x1F8F, 0x1FBC, 0x1FE8, 0x0000,
6220 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0418, 0x042C, 0x0460, 0x048E,
6221 0x04B6, 0x04DC, 0x0000, 0x0538, 0x054C, 0x2168, 0x0000, 0x0000, 0x0000,
6222 0x0000, 0x0000, 0x0000, 0xFF2F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6223 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6224 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6225 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6226 0x0198, 0x01C4, 0x01EE, 0x0218, 0x023A, 0x0000, 0x0000, 0x0000, 0x0000,
6227 0x0000, 0x0000, 0x1E10, 0x1E38, 0x0000, 0x1E88, 0x1EA6, 0x1ECE, 0x1EF6,
6228 0x1F18, 0x1F3A, 0x0000, 0x1FCA, 0x1F98, 0x0000, 0x1FE9, 0x0000, 0x0000,
6229 0x0000, 0x0000, 0x0000, 0x0000, 0x0419, 0x042D, 0x0462, 0x0490, 0x04B8,
6230 0x04DE, 0x0500, 0x0539, 0x054D, 0x2169, 0x0000, 0x0000, 0x0000, 0x0000,
6231 0x0000, 0x0000, 0xFF30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6232 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6233 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6234 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x023D,
6235 0x01C7, 0x0000, 0x021A, 0x023B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6236 0x0000, 0x1E12, 0x1E3A, 0x1E62, 0x1E8A, 0x1EA8, 0x1ED0, 0x1EF8, 0x1F19,
6237 0x1F3B, 0x1F5D, 0x1FCB, 0x1F99, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6238 0x0000, 0x0000, 0x0000, 0x041A, 0x042E, 0x0464, 0x0492, 0x04BA, 0x04E0,
6239 0x0502, 0x053A, 0x054E, 0x216A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6240 0x0000, 0xFF31, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6241 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6242 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6243 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01CA,
6244 0x01F1, 0x021C, 0x023E, 0x0181, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6245 0x1E14, 0x1E3C, 0x1E64, 0x1E8C, 0x1EAA, 0x1ED2, 0x0000, 0x1F1A, 0x1F3C,
6246 0x0000, 0x1FDA, 0x1F9A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6247 0x0000, 0x0000, 0x041B, 0x042F, 0x0466, 0x0494, 0x04BC, 0x04E2, 0x0504,
6248 0x053B, 0x054F, 0x216B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6249 0xFF32, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6250 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6251 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6252 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0220, 0x01CD, 0x01F4,
6253 0x021E, 0x0000, 0x0186, 0x0197, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E16,
6254 0x1E3E, 0x1E66, 0x1E8E, 0x1EAC, 0x1ED4, 0x0000, 0x1F1B, 0x1F3D, 0x1F5F,
6255 0x1FDB, 0x1F9B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6256 0x0000, 0x041C, 0x0400, 0x0468, 0x0496, 0x04BE, 0x04E4, 0x0506, 0x053C,
6257 0x0550, 0x216C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF33,
6258 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6259 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6260 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6261 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01A0, 0x01CF, 0x01F8, 0x0000,
6262 0x0000, 0x0000, 0x0196, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E18, 0x1E40,
6263 0x1E68, 0x1E90, 0x1EAE, 0x1ED6, 0x0000, 0x1F1C, 0x1F3E, 0x0000, 0x1FF8,
6264 0x1F9C, 0x0000, 0x1FEC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6265 0x041D, 0x0401, 0x046A, 0x0498, 0x04C0, 0x04E6, 0x0508, 0x053D, 0x0551,
6266 0x216D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF34, 0x0000,
6267 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6268 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6269 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6270 0x0000, 0x0000, 0x0000, 0x0000, 0x01A2, 0x01D1, 0x01FA, 0x0222, 0x0000,
6271 0x0189, 0x0000, 0x0000, 0x01B7, 0x0000, 0x0000, 0x1E1A, 0x1E42, 0x1E6A,
6272 0x1E92, 0x1EB0, 0x1ED8, 0x0000, 0x1F1D, 0x1F3F, 0x0000, 0x1FF9, 0x1F9D,
6273 0x1FCC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x041E,
6274 0x0402, 0x046C, 0x049A, 0x04C1, 0x04E8, 0x050A, 0x053E, 0x0552, 0x216E,
6275 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF35, 0x0000, 0x0000,
6276 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6277 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6278 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6279 0x0000, 0x0000, 0x0000, 0x01A4, 0x01D3, 0x01FC, 0x0224, 0x0000, 0x018A,
6280 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E1C, 0x1E44, 0x1E6C, 0x1E94,
6281 0x1EB2, 0x1EDA, 0x0000, 0x0000, 0x1F48, 0x0000, 0x1FEA, 0x1F9E, 0x0000,
6282 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x041F, 0x0403,
6283 0x046E, 0x049C, 0x04C3, 0x04EA, 0x050C, 0x053F, 0x0553, 0x216F, 0x0000,
6284 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF36, 0x0000, 0x0000, 0x0000,
6285 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6286 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6287 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6288 0x0000, 0x0000, 0x01A7, 0x01D5, 0x01FE, 0x0226, 0x0000, 0x0000, 0x0000,
6289 0x01A6, 0x0241, 0x0000, 0x0000, 0x1E1E, 0x1E46, 0x1E6E, 0x0000, 0x1EB4,
6290 0x1EDC, 0x0000, 0x0000, 0x1F49, 0x0000, 0x1FEB, 0x1F9F, 0x0000, 0x0000,
6291 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0420, 0x0404, 0x0470,
6292 0x049E, 0x04C5, 0x04EC, 0x050E, 0x0540, 0x0554, 0x0000, 0x0000, 0x0000,
6293 0x0000, 0x0000, 0x0000, 0x0000, 0xFF37, 0x0000, 0x0000, 0x0000, 0x0000,
6294 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6295 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6296 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6297 0x0000, 0x0000, 0x01D7, 0x0200, 0x0228, 0x0000, 0x018F, 0x0000, 0x0000,
6298 0x0000, 0x0000, 0x0000, 0x1E20, 0x1E48, 0x1E70, 0x0000, 0x1EB6, 0x1EDE,
6299 0x0000, 0x0000, 0x1F4A, 0x1F68, 0x1FFA, 0x1FA8, 0x0000, 0x0000, 0x0000,
6300 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0421, 0x0405, 0x0472, 0x04A0,
6301 0x04C7, 0x04EE, 0x0000, 0x0541, 0x0555, 0x0000, 0x0000, 0x0000, 0x0000,
6302 0x0000, 0x0000, 0x0000, 0xFF38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6303 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6304 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6305 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6306 0x0000, 0x01D9, 0x0202, 0x022A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6307 0x0000, 0x0000, 0x1E22, 0x1E4A, 0x1E72, 0x0000, 0x1EB8, 0x1EE0, 0x0000,
6308 0x0000, 0x1F4B, 0x1F69, 0x1FFB, 0x1FA9, 0x0000, 0x0000, 0x0000, 0x0000,
6309 0x0000, 0x0000, 0x0000, 0x0000, 0x0422, 0x0406, 0x0474, 0x04A2, 0x04C9,
6310 0x04F0, 0x0000, 0x0542, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6311 0x0000, 0x0000, 0xFF39, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6312 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6313 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6314 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01AC,
6315 0x01DB, 0x0204, 0x022C, 0x0000, 0x0190, 0x019C, 0x01A9, 0x0000, 0x0000,
6316 0x0000, 0x1E24, 0x1E4C, 0x1E74, 0x0000, 0x1EBA, 0x1EE2, 0x0000, 0x1F28,
6317 0x1F4C, 0x1F6A, 0x0000, 0x1FAA, 0x1FD8, 0x1FFC, 0x0000, 0x0000, 0x0000,
6318 0x0000, 0x0000, 0x0000, 0x0423, 0x0407, 0x0476, 0x04A4, 0x04CB, 0x04F2,
6319 0x0000, 0x0543, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6320 0x0000, 0xFF3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6321 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6322 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6323 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01AF, 0x018E,
6324 0x0206, 0x022E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6325 0x1E26, 0x1E4E, 0x1E76, 0x0000, 0x1EBC, 0x1EE4, 0x0000, 0x1F29, 0x1F4D,
6326 0x1F6B, 0x0000, 0x1FAB, 0x1FD9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6327 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6328 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6329 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6330 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6331 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6332 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6333 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6334 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6335 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6336 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6337 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6338 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6339 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6340 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6341 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6342 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6343 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6344 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6345 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6346 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6347 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6348 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6349 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6350 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6351 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6352 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6353 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6354 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6355 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6356 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6357 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6358 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6359 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6360 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6361 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6362 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6363 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6364 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6365 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6366 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6367 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6368 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6369 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6370 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6371 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6372 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6373 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6374 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6375 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6376 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6377 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6378 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6379 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6380 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6381 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6382 0x0000, 0x0000, 0x0000, 0xFF41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6383 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6384 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6385 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6386 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6387 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6388 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6389 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6390 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6391 0x0000, 0x0000, 0xFF42, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6392 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6393 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6394 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6395 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6396 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6397 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6398 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6399 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6400 0x0000, 0xFF43, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6401 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6402 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6403 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6404 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6405 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6406 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6407 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6408 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6409 0xFF44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6410 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6411 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6412 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6413 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6414 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6415 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6416 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6417 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF45,
6418 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6419 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6420 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6421 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6422 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6423 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6424 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6425 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6426 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF46, 0x0000,
6427 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6428 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6429 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6430 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6431 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6432 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6433 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0430,
6434 0x0444, 0x0458, 0x0479, 0x04A7, 0x04CE, 0x04F5, 0x0000, 0x0574, 0x2170,
6435 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF47, 0x0000, 0x0000,
6436 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6437 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6438 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6439 0x0000, 0x0000, 0x0000, 0x0180, 0x01B4, 0x01DF, 0x0209, 0x0231, 0x0000,
6440 0x025D, 0x0271, 0x0285, 0x0299, 0x02AD, 0x1E01, 0x1E29, 0x1E51, 0x1E79,
6441 0x1E9B, 0x1EBF, 0x1EE7, 0x1F00, 0x1F22, 0x0000, 0x1F64, 0x1F80, 0x1FA4,
6442 0x1FD2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0431, 0x0445,
6443 0x0459, 0x047B, 0x04A9, 0x0000, 0x04F7, 0x0561, 0x0575, 0x2171, 0x0000,
6444 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF48, 0x0000, 0x0000, 0x0000,
6445 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6446 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6447 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6448 0x0000, 0x0000, 0x0183, 0x01B6, 0x01E1, 0x020B, 0x0233, 0x0000, 0x025E,
6449 0x0272, 0x0286, 0x029A, 0x02AE, 0x1E03, 0x1E2B, 0x1E53, 0x1E7B, 0x0000,
6450 0x1EC1, 0x1EE9, 0x1F01, 0x1F23, 0x0000, 0x1F65, 0x1F81, 0x1FA5, 0x1FD3,
6451 0x1FF6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0432, 0x0446, 0x045A,
6452 0x047D, 0x04AB, 0x04D1, 0x04F9, 0x0562, 0x0576, 0x2172, 0x0000, 0x0000,
6453 0x0000, 0x0000, 0x0000, 0x0000, 0xFF49, 0x0000, 0x0000, 0x0000, 0x0000,
6454 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6455 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6456 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6457 0x0000, 0x0185, 0x01B9, 0x01E3, 0x020D, 0x0234, 0x0000, 0x025F, 0x0273,
6458 0x0287, 0x029B, 0x02AF, 0x1E05, 0x1E2D, 0x1E55, 0x1E7D, 0x0000, 0x1EC3,
6459 0x1EEB, 0x1F02, 0x1F24, 0x0000, 0x1F66, 0x1F82, 0x1FA6, 0x0000, 0x1FF7,
6460 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0433, 0x0447, 0x045B, 0x047F,
6461 0x04AD, 0x04D3, 0x0000, 0x0563, 0x0577, 0x2173, 0x0000, 0x0000, 0x0000,
6462 0x0000, 0x0000, 0x0000, 0xFF4A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6463 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6464 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6465 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6466 0x0188, 0x01BA, 0x01E5, 0x020F, 0x0235, 0x0000, 0x0260, 0x0274, 0x0288,
6467 0x029C, 0x0000, 0x1E07, 0x1E2F, 0x1E57, 0x1E7F, 0x0000, 0x1EC5, 0x1EED,
6468 0x1F03, 0x1F25, 0x0000, 0x1F67, 0x1F83, 0x1FA7, 0x0000, 0x0000, 0x0000,
6469 0x0000, 0x0000, 0x0000, 0x0000, 0x0434, 0x0448, 0x045C, 0x0481, 0x04AF,
6470 0x04D5, 0x0000, 0x0564, 0x0578, 0x2174, 0x0000, 0x0000, 0x0000, 0x0000,
6471 0x0000, 0x0000, 0xFF4B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6472 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6473 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6474 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018C,
6475 0x01BB, 0x01E7, 0x0211, 0x0236, 0x0000, 0x0261, 0x0275, 0x0289, 0x029D,
6476 0x0000, 0x1E09, 0x1E31, 0x1E59, 0x1E81, 0x0000, 0x1EC7, 0x1EEF, 0x1F04,
6477 0x1F26, 0x1F50, 0x1F70, 0x1F84, 0x1FB0, 0x1FD6, 0x0000, 0x0000, 0x0000,
6478 0x0000, 0x0000, 0x0000, 0x0435, 0x0449, 0x045D, 0x0000, 0x04B1, 0x04D7,
6479 0x0000, 0x0565, 0x0579, 0x2175, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6480 0x0000, 0xFF4C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6481 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6482 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6483 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018D, 0x0000,
6484 0x01E9, 0x0213, 0x0237, 0x0000, 0x0262, 0x0276, 0x028A, 0x029E, 0x0000,
6485 0x1E0B, 0x1E33, 0x1E5B, 0x1E83, 0x1EA1, 0x1EC9, 0x1EF1, 0x1F05, 0x1F27,
6486 0x1F51, 0x1F71, 0x1F85, 0x1FB1, 0x1FD7, 0x0000, 0x0000, 0x0000, 0x0000,
6487 0x0000, 0x0000, 0x0436, 0x044A, 0x045E, 0x048B, 0x04B3, 0x04D9, 0x0000,
6488 0x0566, 0x057A, 0x2176, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6489 0xFF4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6490 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6491 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6492 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x01BE, 0x01EB,
6493 0x0215, 0x0238, 0x0000, 0x0263, 0x0277, 0x028B, 0x029F, 0x0000, 0x1E0D,
6494 0x1E35, 0x1E5D, 0x1E85, 0x1EA3, 0x1ECB, 0x1EF3, 0x1F06, 0x1F30, 0x1F52,
6495 0x1F72, 0x1F86, 0x1FB2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6496 0x0000, 0x0437, 0x044B, 0x045F, 0x048D, 0x04B5, 0x04DB, 0x0000, 0x0567,
6497 0x057B, 0x2177, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF4E,
6498 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6499 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6500 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6501 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0195, 0x01BD, 0x01ED, 0x0217,
6502 0x0239, 0x0250, 0x0264, 0x0278, 0x028C, 0x02A0, 0x0000, 0x1E0F, 0x1E37,
6503 0x1E5F, 0x1E87, 0x1EA5, 0x1ECD, 0x1EF5, 0x1F07, 0x1F31, 0x1F53, 0x1F73,
6504 0x1F87, 0x1FB3, 0x1FE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6505 0x0438, 0x044C, 0x0461, 0x048F, 0x04B7, 0x04DD, 0x0000, 0x0568, 0x057C,
6506 0x2178, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF4F, 0x0000,
6507 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6508 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6509 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6510 0x0000, 0x0000, 0x0000, 0x0000, 0x0199, 0x01C6, 0x01EF, 0x0219, 0x0000,
6511 0x0251, 0x0265, 0x0279, 0x028D, 0x02A1, 0x0000, 0x1E11, 0x1E39, 0x1E61,
6512 0x1E89, 0x1EA7, 0x1ECF, 0x1EF7, 0x1F10, 0x1F32, 0x1F54, 0x1F74, 0x1F90,
6513 0x1FB4, 0x1FE1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0439,
6514 0x044D, 0x0463, 0x0491, 0x04B9, 0x04DF, 0x0501, 0x0569, 0x057D, 0x2179,
6515 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF50, 0x0000, 0x0000,
6516 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6517 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6518 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6519 0x0000, 0x0000, 0x0000, 0x019A, 0x01C9, 0x01F0, 0x021B, 0x023C, 0x0252,
6520 0x0266, 0x027A, 0x028E, 0x02A2, 0x0000, 0x1E13, 0x1E3B, 0x1E63, 0x1E8B,
6521 0x1EA9, 0x1ED1, 0x1EF9, 0x1F11, 0x1F33, 0x1F55, 0x1F75, 0x1F91, 0x0000,
6522 0x1FE2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x043A, 0x044E,
6523 0x0465, 0x0493, 0x04BB, 0x04E1, 0x0503, 0x056A, 0x057E, 0x217A, 0x0000,
6524 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF51, 0x0000, 0x0000, 0x0000,
6525 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6526 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6527 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6528 0x0000, 0x0000, 0x019B, 0x01CC, 0x01F3, 0x021D, 0x0000, 0x0253, 0x0267,
6529 0x027B, 0x028F, 0x02A3, 0x0000, 0x1E15, 0x1E3D, 0x1E65, 0x1E8D, 0x1EAB,
6530 0x1ED3, 0x0000, 0x1F12, 0x1F34, 0x1F56, 0x1F76, 0x1F92, 0x1FB6, 0x1FE3,
6531 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x043B, 0x044F, 0x0467,
6532 0x0495, 0x04BD, 0x04E3, 0x0505, 0x056B, 0x057F, 0x217B, 0x0000, 0x0000,
6533 0x0000, 0x0000, 0x0000, 0x0000, 0xFF52, 0x0000, 0x0000, 0x0000, 0x0000,
6534 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6535 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6536 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6537 0x0000, 0x019E, 0x01CE, 0x01F5, 0x021F, 0x023F, 0x0254, 0x0268, 0x027C,
6538 0x0290, 0x02A4, 0x0000, 0x1E17, 0x1E3F, 0x1E67, 0x1E8F, 0x1EAD, 0x1ED5,
6539 0x0000, 0x1F13, 0x1F35, 0x1F57, 0x1F77, 0x1F93, 0x1FB7, 0x1FE4, 0x0000,
6540 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x043C, 0x0450, 0x0469, 0x0497,
6541 0x04BF, 0x04E5, 0x0507, 0x056C, 0x0580, 0x217C, 0x0000, 0x0000, 0x0000,
6542 0x0000, 0x0000, 0x0000, 0xFF53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6543 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6544 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6545 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6546 0x01A1, 0x01D0, 0x01F9, 0x0221, 0x0240, 0x0255, 0x0269, 0x027D, 0x0291,
6547 0x02A5, 0x0000, 0x1E19, 0x1E41, 0x1E69, 0x1E91, 0x1EAF, 0x1ED7, 0x0000,
6548 0x1F14, 0x1F36, 0x0000, 0x1F78, 0x1F94, 0x1FC2, 0x1FE5, 0x0000, 0x0000,
6549 0x0000, 0x0000, 0x0000, 0x0000, 0x043D, 0x0451, 0x046B, 0x0499, 0x0000,
6550 0x04E7, 0x0509, 0x056D, 0x0581, 0x217D, 0x0000, 0x0000, 0x0000, 0x0000,
6551 0x0000, 0x0000, 0xFF54, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6552 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6553 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6554 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01A3,
6555 0x01D2, 0x01FB, 0x0223, 0x0000, 0x0256, 0x026A, 0x027E, 0x0292, 0x02A6,
6556 0x0000, 0x1E1B, 0x1E43, 0x1E6B, 0x1E93, 0x1EB1, 0x1ED9, 0x0000, 0x1F15,
6557 0x1F37, 0x0000, 0x1F79, 0x1F95, 0x1FC3, 0x1FE6, 0x0000, 0x0000, 0x0000,
6558 0x0000, 0x0000, 0x0000, 0x043E, 0x0452, 0x046D, 0x049B, 0x04C2, 0x04E9,
6559 0x050B, 0x056E, 0x0582, 0x217E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6560 0x0000, 0xFF55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6561 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6562 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6563 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01A5, 0x01D4,
6564 0x01FD, 0x0225, 0x0000, 0x0257, 0x026B, 0x027F, 0x0293, 0x02A7, 0x0000,
6565 0x1E1D, 0x1E45, 0x1E6D, 0x1E95, 0x1EB3, 0x1EDB, 0x0000, 0x0000, 0x1F40,
6566 0x0000, 0x1F7A, 0x1F96, 0x1FC4, 0x1FE7, 0x0000, 0x0000, 0x0000, 0x0000,
6567 0x0000, 0x0000, 0x043F, 0x0453, 0x046F, 0x049D, 0x04C4, 0x04EB, 0x050D,
6568 0x056F, 0x0583, 0x217F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6569 0xFF56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6570 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6571 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6572 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01A8, 0x01D6, 0x01FF,
6573 0x0227, 0x0000, 0x0258, 0x026C, 0x0280, 0x0294, 0x02A8, 0x0000, 0x1E1F,
6574 0x1E47, 0x1E6F, 0x1E96, 0x1EB5, 0x1EDD, 0x0000, 0x0000, 0x1F41, 0x0000,
6575 0x1F7B, 0x1F97, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6576 0x0000, 0x0440, 0x0454, 0x0471, 0x049F, 0x04C6, 0x04ED, 0x050F, 0x0570,
6577 0x0584, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF57,
6578 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6579 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6580 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6581 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01AA, 0x01D8, 0x0201, 0x0229,
6582 0x0000, 0x0259, 0x026D, 0x0281, 0x0295, 0x02A9, 0x0000, 0x1E21, 0x1E49,
6583 0x1E71, 0x1E97, 0x1EB7, 0x1EDF, 0x0000, 0x0000, 0x1F42, 0x1F60, 0x1F7C,
6584 0x1FA0, 0x1FC6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6585 0x0441, 0x0455, 0x0473, 0x04A1, 0x04C8, 0x04EF, 0x0000, 0x0571, 0x0585,
6586 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF58, 0x0000,
6587 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6588 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6589 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6590 0x0000, 0x0000, 0x0000, 0x0000, 0x01AB, 0x01DA, 0x0203, 0x022B, 0x0000,
6591 0x025A, 0x026E, 0x0282, 0x0296, 0x02AA, 0x0000, 0x1E23, 0x1E4B, 0x1E73,
6592 0x1E98, 0x1EB9, 0x1EE1, 0x0000, 0x0000, 0x1F43, 0x1F61, 0x1F7D, 0x1FA1,
6593 0x1FC7, 0x1FF2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0442,
6594 0x0456, 0x0475, 0x04A3, 0x04CA, 0x04F1, 0x0000, 0x0572, 0x0000, 0x0000,
6595 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF59, 0x0000, 0x0000,
6596 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6597 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6598 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6599 0x0000, 0x0000, 0x0000, 0x01AD, 0x01DC, 0x0205, 0x022D, 0x0000, 0x025B,
6600 0x026F, 0x0283, 0x0297, 0x02AB, 0x0000, 0x1E25, 0x1E4D, 0x1E75, 0x1E99,
6601 0x1EBB, 0x1EE3, 0x0000, 0x1F20, 0x1F44, 0x1F62, 0x0000, 0x1FA2, 0x1FD0,
6602 0x1FF3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0443, 0x0457,
6603 0x0477, 0x04A5, 0x04CC, 0x04F3, 0x0000, 0x0573, 0x0000, 0x0000, 0x0000,
6604 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF5A, 0x0000, 0x0000, 0x0000,
6605 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6606 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6607 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6608 0x0000, 0x0000, 0x01B0, 0x01DD, 0x0207, 0x022F, 0x0000, 0x025C, 0x0270,
6609 0x0284, 0x0298, 0x02AC, 0x0000, 0x1E27, 0x1E4F, 0x1E77, 0x1E9A, 0x1EBD,
6610 0x1EE5, 0x0000, 0x1F21, 0x1F45, 0x1F63, 0x0000, 0x1FA3, 0x1FD1, 0x1FF4};
6611
6612 /* 00C0-05FF */
6613 static const uint16 uni_0C00_05FF[1344] = {
6614 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
6615 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028,
6616 0x0029, 0x002A, 0x0067, 0x0068, 0x0069, 0x0000, 0x006B, 0x006C, 0x006D,
6617 0x006E, 0x006F, 0x0070, 0x0071, 0x008A, 0x0037, 0x0038, 0x0039, 0x003A,
6618 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043,
6619 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x0087, 0x0088,
6620 0x0089, 0x0000, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091,
6621 0x0092, 0x0073, 0x0093, 0x0074, 0x0094, 0x0075, 0x0095, 0x0076, 0x0096,
6622 0x0077, 0x0097, 0x0078, 0x0098, 0x0079, 0x0099, 0x007A, 0x009A, 0x00B7,
6623 0x00D7, 0x00B8, 0x00D8, 0x00B9, 0x00D9, 0x00BA, 0x00DA, 0x00BB, 0x00DB,
6624 0x00BC, 0x00DC, 0x00BD, 0x00DD, 0x00BE, 0x00DE, 0x00BF, 0x00DF, 0x00C0,
6625 0x00E0, 0x00C1, 0x00E1, 0x00C2, 0x00E2, 0x00C3, 0x00E3, 0x00C4, 0x00E4,
6626 0x00C5, 0x00E5, 0x00C6, 0x00E6, 0x0000, 0x00E7, 0x00C8, 0x00E8, 0x00C9,
6627 0x00E9, 0x00CA, 0x00EA, 0x0127, 0x0108, 0x0128, 0x0109, 0x0129, 0x010A,
6628 0x012A, 0x010B, 0x012B, 0x010C, 0x012C, 0x010D, 0x012D, 0x010E, 0x012E,
6629 0x010F, 0x012F, 0x0130, 0x0111, 0x0131, 0x0112, 0x0132, 0x0113, 0x0133,
6630 0x0114, 0x0134, 0x0115, 0x0135, 0x0116, 0x0136, 0x0117, 0x0137, 0x0118,
6631 0x0138, 0x0119, 0x0139, 0x011A, 0x013A, 0x0157, 0x0177, 0x0158, 0x0178,
6632 0x0159, 0x0179, 0x015A, 0x017A, 0x015B, 0x017B, 0x015C, 0x017C, 0x015D,
6633 0x017D, 0x015E, 0x017E, 0x015F, 0x017F, 0x0160, 0x0180, 0x0161, 0x0181,
6634 0x0162, 0x0182, 0x0163, 0x0183, 0x0072, 0x0164, 0x0184, 0x0165, 0x0185,
6635 0x0166, 0x0186, 0x0187, 0x1161, 0x0A86, 0x07B1, 0x11B1, 0x0801, 0x1201,
6636 0x0AD6, 0x0851, 0x1251, 0x0B76, 0x0BC6, 0x08A1, 0x12A1, 0x12F1, 0x0D52,
6637 0x0C66, 0x0D06, 0x0941, 0x1341, 0x0857, 0x0947, 0x1391, 0x0B27, 0x0AD7,
6638 0x09E1, 0x13E1, 0x1431, 0x1481, 0x0D07, 0x07B8, 0x14D1, 0x08A8, 0x0B21,
6639 0x1521, 0x0B71, 0x1571, 0x0BC1, 0x15C1, 0x0C18, 0x0C11, 0x1611, 0x0D08,
6640 0x1661, 0x16B1, 0x0D01, 0x1701, 0x0859, 0x0D51, 0x1751, 0x08F9, 0x0949,
6641 0x0762, 0x1162, 0x07B2, 0x11B2, 0x0B79, 0x0802, 0x1202, 0x1252, 0x12A2,
6642 0x0992, 0x1392, 0x1342, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x09E2,
6643 0x0000, 0x13E2, 0x0A32, 0x0000, 0x1432, 0x0A82, 0x0000, 0x1482, 0x0AD2,
6644 0x14D2, 0x0B22, 0x1522, 0x0B72, 0x1572, 0x0BC2, 0x15C2, 0x0C12, 0x1612,
6645 0x0C62, 0x1662, 0x0CB2, 0x16B2, 0x0D02, 0x1702, 0x1752, 0x0763, 0x1163,
6646 0x07B3, 0x11B3, 0x0803, 0x1203, 0x0853, 0x1253, 0x08A3, 0x12A3, 0x08F3,
6647 0x12F3, 0x0943, 0x1343, 0x0993, 0x1393, 0x09E3, 0x13E3, 0x1433, 0x0A83,
6648 0x0000, 0x1483, 0x0AD3, 0x14D3, 0x0991, 0x0000, 0x0B23, 0x1523, 0x0B73,
6649 0x1573, 0x0BC3, 0x15C3, 0x0C13, 0x1613, 0x0C63, 0x1663, 0x0CB3, 0x16B3,
6650 0x0D03, 0x1703, 0x0D53, 0x1753, 0x0764, 0x1164, 0x07B4, 0x11B4, 0x0804,
6651 0x1204, 0x0854, 0x1254, 0x08A4, 0x12A4, 0x08F4, 0x12F4, 0x0944, 0x1344,
6652 0x0994, 0x1394, 0x09E4, 0x13E4, 0x0A34, 0x1434, 0x0A84, 0x1484, 0x0AD4,
6653 0x14D4, 0x0AD1, 0x1524, 0x0B74, 0x1574, 0x0BC4, 0x15C4, 0x0C14, 0x1614,
6654 0x0C64, 0x1664, 0x0CB4, 0x16B4, 0x0D04, 0x1704, 0x0D54, 0x1754, 0x0765,
6655 0x1165, 0x07B5, 0x11B5, 0x1205, 0x1255, 0x12A5, 0x12F5, 0x1345, 0x1395,
6656 0x09E5, 0x0A35, 0x1435, 0x0A31, 0x0A85, 0x14D5, 0x1525, 0x0C19, 0x0000,
6657 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6658 0x0000, 0x0000, 0x0000, 0x0000, 0x1396, 0x13E6, 0x1436, 0x1486, 0x14D6,
6659 0x1526, 0x1576, 0x15C6, 0x1616, 0x1666, 0x16B6, 0x1706, 0x1756, 0x1167,
6660 0x11B7, 0x1207, 0x1257, 0x12A7, 0x12F7, 0x1347, 0x1397, 0x13E7, 0x1437,
6661 0x1487, 0x14D7, 0x1527, 0x1577, 0x15C7, 0x1617, 0x1667, 0x16B7, 0x1707,
6662 0x1757, 0x1168, 0x11B8, 0x1208, 0x1258, 0x12A8, 0x12F8, 0x1348, 0x1398,
6663 0x13E8, 0x1438, 0x1488, 0x14D8, 0x1528, 0x1578, 0x15C8, 0x1618, 0x1668,
6664 0x16B8, 0x1708, 0x1758, 0x1169, 0x11B9, 0x1209, 0x1259, 0x12A9, 0x12F9,
6665 0x1349, 0x1399, 0x13E9, 0x1439, 0x1489, 0x14D9, 0x1529, 0x1579, 0x15C9,
6666 0x1619, 0x1669, 0x16B9, 0x1709, 0x1759, 0x116A, 0x11BA, 0x120A, 0x125A,
6667 0x12AA, 0x12FA, 0x134A, 0x139A, 0x13EA, 0x143A, 0x148A, 0x14DA, 0x152A,
6668 0x157A, 0x15CA, 0x161A, 0x166A, 0x16BA, 0x170A, 0x175A, 0x116B, 0x11BB,
6669 0x120B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6670 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6671 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6672 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6673 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6674 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6675 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6676 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6677 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6678 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6679 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6680 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6681 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6682 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6683 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6684 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6685 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6686 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6687 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6688 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6689 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6690 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6691 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6692 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01F7,
6693 0x0000, 0x01F8, 0x01F9, 0x01FA, 0x0000, 0x0253, 0x0000, 0x0254, 0x0255,
6694 0x01D9, 0x01FC, 0x0257, 0x01FE, 0x01FF, 0x0200, 0x0201, 0x0202, 0x0258,
6695 0x0204, 0x02A7, 0x0206, 0x0207, 0x0208, 0x0209, 0x020A, 0x0299, 0x0248,
6696 0x0000, 0x02A9, 0x024B, 0x024C, 0x0298, 0x024E, 0x024F, 0x0250, 0x0251,
6697 0x0252, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D, 0x021E,
6698 0x021F, 0x0220, 0x0221, 0x0222, 0x0223, 0x0224, 0x0225, 0x0226, 0x0227,
6699 0x0228, 0x0229, 0x022A, 0x0267, 0x0268, 0x0269, 0x026A, 0x026B, 0x026C,
6700 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275,
6701 0x0000, 0x0277, 0x0278, 0x0259, 0x025A, 0x0297, 0x02B8, 0x02B9, 0x02BA,
6702 0x0000, 0x02BB, 0x029C, 0x02BC, 0x029D, 0x02BD, 0x029E, 0x02BE, 0x029F,
6703 0x02BF, 0x02A0, 0x02C0, 0x02A1, 0x02C1, 0x02A2, 0x02C2, 0x02A3, 0x02C3,
6704 0x02A4, 0x02C4, 0x02A5, 0x02C5, 0x02A6, 0x02C6, 0x02C7, 0x02C8, 0x02C9,
6705 0x02CA, 0x0000, 0x0307, 0x0308, 0x0000, 0x0309, 0x0000, 0x0000, 0x030A,
6706 0x030B, 0x02EC, 0x02ED, 0x02EE, 0x0AF1, 0x0B41, 0x0B91, 0x0BE1, 0x0C31,
6707 0x0C81, 0x0CD1, 0x0D21, 0x0732, 0x0782, 0x07D2, 0x0822, 0x0872, 0x08C2,
6708 0x0912, 0x0962, 0x0730, 0x0780, 0x07D0, 0x0820, 0x0870, 0x08C0, 0x0910,
6709 0x0960, 0x09B0, 0x0A00, 0x0A50, 0x0AA0, 0x0AF0, 0x0B40, 0x0B90, 0x0BE0,
6710 0x0C30, 0x0C80, 0x0CD0, 0x0D20, 0x0731, 0x0781, 0x07D1, 0x0821, 0x0871,
6711 0x08C1, 0x0911, 0x0961, 0x09B1, 0x0A01, 0x0A51, 0x0AA1, 0x1130, 0x1180,
6712 0x11D0, 0x1220, 0x1270, 0x12C0, 0x1310, 0x1360, 0x13B0, 0x1400, 0x1450,
6713 0x14A0, 0x14F0, 0x1540, 0x1590, 0x15E0, 0x1630, 0x1680, 0x16D0, 0x1720,
6714 0x1131, 0x1181, 0x11D1, 0x1221, 0x1271, 0x12C1, 0x1311, 0x1361, 0x13B1,
6715 0x1401, 0x1451, 0x14A1, 0x14F1, 0x1541, 0x1591, 0x15E1, 0x1631, 0x1681,
6716 0x16D1, 0x1721, 0x1132, 0x1182, 0x11D2, 0x1222, 0x1272, 0x12C2, 0x1312,
6717 0x1362, 0x09B2, 0x13B2, 0x0A02, 0x1402, 0x0A52, 0x1452, 0x0AA2, 0x14A2,
6718 0x0AF2, 0x14F2, 0x0B42, 0x1542, 0x0B92, 0x1592, 0x0BE2, 0x15E2, 0x0C32,
6719 0x1632, 0x0C82, 0x1682, 0x0CD2, 0x16D2, 0x0D22, 0x1722, 0x0733, 0x1133,
6720 0x0783, 0x1183, 0x07D3, 0x11D3, 0x0823, 0x1223, 0x0873, 0x1273, 0x0000,
6721 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0913, 0x1313,
6722 0x0963, 0x1363, 0x09B3, 0x13B3, 0x0A03, 0x1403, 0x0A53, 0x1453, 0x0AA3,
6723 0x14A3, 0x0AF3, 0x14F3, 0x0B43, 0x1543, 0x0B93, 0x1593, 0x0BE3, 0x15E3,
6724 0x0C33, 0x1633, 0x0C83, 0x1683, 0x0CD3, 0x16D3, 0x0D23, 0x1723, 0x0734,
6725 0x1134, 0x0784, 0x1184, 0x07D4, 0x11D4, 0x0824, 0x1224, 0x0874, 0x1274,
6726 0x08C4, 0x12C4, 0x0914, 0x1314, 0x0964, 0x1364, 0x09B4, 0x13B4, 0x0A04,
6727 0x1404, 0x0A54, 0x1454, 0x0AA4, 0x14A4, 0x0AF4, 0x14F4, 0x0B44, 0x0B94,
6728 0x1594, 0x0BE4, 0x15E4, 0x0C34, 0x1634, 0x0C84, 0x1684, 0x0CD4, 0x16D4,
6729 0x0D24, 0x1724, 0x0735, 0x1135, 0x0000, 0x07D5, 0x11D5, 0x0825, 0x1225,
6730 0x0875, 0x1275, 0x08C5, 0x12C5, 0x0915, 0x1315, 0x0965, 0x1365, 0x09B5,
6731 0x13B5, 0x0A05, 0x1405, 0x0A55, 0x1455, 0x0AA5, 0x14A5, 0x0AF5, 0x14F5,
6732 0x0B45, 0x1545, 0x0B95, 0x1595, 0x0BE5, 0x15E5, 0x0C35, 0x1635, 0x0C85,
6733 0x1685, 0x0CD5, 0x16D5, 0x0D25, 0x1725, 0x0736, 0x1136, 0x0786, 0x1186,
6734 0x07D6, 0x11D6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0A06,
6735 0x1406, 0x0A56, 0x1456, 0x0AA6, 0x14A6, 0x0AF6, 0x14F6, 0x0B46, 0x1546,
6736 0x0B96, 0x1596, 0x0BE6, 0x15E6, 0x0C36, 0x1636, 0x0000, 0x0000, 0x0000,
6737 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6738 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6739 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6740 0x0000, 0x0000, 0x0000, 0x0787, 0x07D7, 0x0827, 0x0877, 0x08C7, 0x0917,
6741 0x0967, 0x09B7, 0x0A07, 0x0A57, 0x0AA7, 0x0AF7, 0x0B47, 0x0B97, 0x0BE7,
6742 0x0C37, 0x0C87, 0x0CD7, 0x0D27, 0x0738, 0x0788, 0x07D8, 0x0828, 0x0878,
6743 0x08C8, 0x0918, 0x0968, 0x09B8, 0x0A08, 0x0A58, 0x0AA8, 0x0AF8, 0x0B48,
6744 0x0B98, 0x0BE8, 0x0C38, 0x0C88, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6745 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1187, 0x11D7, 0x1227,
6746 0x1277, 0x12C7, 0x1317, 0x1367, 0x13B7, 0x1407, 0x1457, 0x14A7, 0x14F7,
6747 0x1547, 0x1597, 0x15E7, 0x1637, 0x1687, 0x16D7, 0x1727, 0x1138, 0x1188,
6748 0x11D8, 0x1228, 0x1278, 0x12C8, 0x1318, 0x1368, 0x13B8, 0x1408, 0x1458,
6749 0x14A8, 0x14F8, 0x1548, 0x1598, 0x15E8, 0x1638, 0x1688, 0x0000, 0x0000,
6750 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6751 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6752 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6753 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6754 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6755 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6756 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6757 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6758 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6759 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6760 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6761 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6762 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6763 0x0000, 0x0000, 0x0000};
6764
6765 /* 1E00-1FFF */
6766 static const uint16 uni_1E00_1FFF[512] = {
6767 0x076C, 0x116C, 0x07BC, 0x11BC, 0x080C, 0x120C, 0x085C, 0x125C, 0x08AC,
6768 0x12AC, 0x08FC, 0x12FC, 0x094C, 0x134C, 0x099C, 0x139C, 0x09EC, 0x13EC,
6769 0x0A3C, 0x143C, 0x0A8C, 0x148C, 0x0ADC, 0x14DC, 0x0B2C, 0x152C, 0x0B7C,
6770 0x157C, 0x0BCC, 0x15CC, 0x0C1C, 0x161C, 0x0C6C, 0x166C, 0x0CBC, 0x16BC,
6771 0x0D0C, 0x170C, 0x0D5C, 0x175C, 0x076D, 0x116D, 0x07BD, 0x11BD, 0x080D,
6772 0x120D, 0x085D, 0x125D, 0x08AD, 0x12AD, 0x08FD, 0x12FD, 0x094D, 0x134D,
6773 0x099D, 0x139D, 0x09ED, 0x13ED, 0x0A3D, 0x143D, 0x0A8D, 0x148D, 0x0ADD,
6774 0x14DD, 0x0B2D, 0x152D, 0x0B7D, 0x157D, 0x0BCD, 0x15CD, 0x0C1D, 0x161D,
6775 0x0C6D, 0x166D, 0x0CBD, 0x16BD, 0x0D0D, 0x170D, 0x0D5D, 0x175D, 0x076E,
6776 0x116E, 0x07BE, 0x11BE, 0x080E, 0x120E, 0x085E, 0x125E, 0x08AE, 0x12AE,
6777 0x08FE, 0x12FE, 0x094E, 0x134E, 0x099E, 0x139E, 0x0770, 0x13EE, 0x0A3E,
6778 0x143E, 0x0A8E, 0x148E, 0x0ADE, 0x14DE, 0x0B2E, 0x152E, 0x0B7E, 0x157E,
6779 0x0BCE, 0x15CE, 0x0C1E, 0x161E, 0x0C6E, 0x166E, 0x0CBE, 0x16BE, 0x0D0E,
6780 0x170E, 0x0D5E, 0x175E, 0x076F, 0x116F, 0x07BF, 0x11BF, 0x080F, 0x120F,
6781 0x085F, 0x125F, 0x08AF, 0x12AF, 0x08FF, 0x12FF, 0x094F, 0x134F, 0x099F,
6782 0x139F, 0x09EF, 0x13EF, 0x0A3F, 0x143F, 0x0A8F, 0x148F, 0x0ADF, 0x14DF,
6783 0x0B2F, 0x152F, 0x0B7F, 0x157F, 0x0BCF, 0x15CF, 0x161F, 0x166F, 0x16BF,
6784 0x170F, 0x175F, 0x1170, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x1300,
6785 0x0950, 0x1350, 0x09A0, 0x13A0, 0x09F0, 0x13F0, 0x0A40, 0x1440, 0x0A90,
6786 0x1490, 0x0AE0, 0x14E0, 0x0B30, 0x1530, 0x0B80, 0x1580, 0x0BD0, 0x15D0,
6787 0x0C20, 0x1620, 0x0C70, 0x1670, 0x0CC0, 0x16C0, 0x0D10, 0x1710, 0x0D60,
6788 0x1760, 0x0771, 0x1171, 0x07C1, 0x11C1, 0x0811, 0x1211, 0x0861, 0x1261,
6789 0x08B1, 0x12B1, 0x0901, 0x1301, 0x0951, 0x1351, 0x09A1, 0x13A1, 0x09F1,
6790 0x13F1, 0x0A41, 0x1441, 0x0A91, 0x1491, 0x0AE1, 0x14E1, 0x0B31, 0x1531,
6791 0x0B81, 0x1581, 0x0BD1, 0x15D1, 0x0C21, 0x1621, 0x0C71, 0x1671, 0x0CC1,
6792 0x16C1, 0x0D11, 0x1711, 0x0D61, 0x1761, 0x0772, 0x1172, 0x07C2, 0x11C2,
6793 0x0812, 0x1212, 0x0862, 0x1262, 0x08B2, 0x12B2, 0x0902, 0x1302, 0x0952,
6794 0x1352, 0x09A2, 0x13A2, 0x09F2, 0x13F2, 0x0A42, 0x1442, 0x0000, 0x0000,
6795 0x0000, 0x0000, 0x0000, 0x0000, 0x1173, 0x11C3, 0x1213, 0x1263, 0x12B3,
6796 0x1303, 0x1353, 0x13A3, 0x0773, 0x07C3, 0x0813, 0x0863, 0x08B3, 0x0903,
6797 0x0953, 0x09A3, 0x13F3, 0x1443, 0x1493, 0x14E3, 0x1533, 0x1583, 0x0000,
6798 0x0000, 0x09F3, 0x0A43, 0x0A93, 0x0AE3, 0x0B33, 0x0B83, 0x0000, 0x0000,
6799 0x1713, 0x1763, 0x1174, 0x11C4, 0x1214, 0x1264, 0x12B4, 0x1304, 0x0D13,
6800 0x0D63, 0x0774, 0x07C4, 0x0814, 0x0864, 0x08B4, 0x0904, 0x1354, 0x13A4,
6801 0x13F4, 0x1444, 0x1494, 0x14E4, 0x1534, 0x1584, 0x0954, 0x09A4, 0x09F4,
6802 0x0A44, 0x0A94, 0x0AE4, 0x0B34, 0x0B84, 0x15D4, 0x1624, 0x1674, 0x16C4,
6803 0x1714, 0x1764, 0x0000, 0x0000, 0x0BD4, 0x0C24, 0x0C74, 0x0CC4, 0x0D14,
6804 0x0D64, 0x0000, 0x0000, 0x12B5, 0x1305, 0x1355, 0x13A5, 0x13F5, 0x1445,
6805 0x1495, 0x14E5, 0x0000, 0x0905, 0x0000, 0x09A5, 0x0000, 0x0A45, 0x0000,
6806 0x0AE5, 0x1675, 0x16C5, 0x1715, 0x1765, 0x1176, 0x11C6, 0x1216, 0x1266,
6807 0x0C75, 0x0CC5, 0x0D15, 0x0D65, 0x0776, 0x07C6, 0x0816, 0x0866, 0x12B6,
6808 0x1306, 0x1356, 0x13A6, 0x13F6, 0x1446, 0x1496, 0x14E6, 0x1536, 0x1586,
6809 0x15D6, 0x1626, 0x1676, 0x16C6, 0x0000, 0x0000, 0x1177, 0x11C7, 0x1217,
6810 0x1267, 0x12B7, 0x1307, 0x1357, 0x13A7, 0x0777, 0x07C7, 0x0817, 0x0867,
6811 0x08B7, 0x0907, 0x0957, 0x09A7, 0x13F7, 0x1447, 0x1497, 0x14E7, 0x1537,
6812 0x1587, 0x15D7, 0x1627, 0x09F7, 0x0A47, 0x0A97, 0x0AE7, 0x0B37, 0x0B87,
6813 0x0BD7, 0x0C27, 0x1677, 0x16C7, 0x1717, 0x1767, 0x1178, 0x11C8, 0x1218,
6814 0x1268, 0x0C77, 0x0CC7, 0x0D17, 0x0D67, 0x0778, 0x07C8, 0x0818, 0x0868,
6815 0x12B8, 0x1308, 0x1358, 0x13A8, 0x13F8, 0x0000, 0x1498, 0x14E8, 0x08B8,
6816 0x0908, 0x08B6, 0x0906, 0x09A8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6817 0x1538, 0x1588, 0x15D8, 0x0000, 0x1678, 0x16C8, 0x0956, 0x09A6, 0x09F6,
6818 0x0A46, 0x0B88, 0x0000, 0x0000, 0x0000, 0x1718, 0x1768, 0x1179, 0x11C9,
6819 0x0000, 0x0000, 0x12B9, 0x1309, 0x0D18, 0x0D68, 0x0A96, 0x0AE6, 0x0000,
6820 0x0000, 0x0000, 0x0000, 0x13A9, 0x13F9, 0x1449, 0x1499, 0x14E9, 0x1539,
6821 0x1589, 0x15D9, 0x09A9, 0x09F9, 0x0BD6, 0x0C26, 0x0B39, 0x0000, 0x0000,
6822 0x0000, 0x0000, 0x0000, 0x16C9, 0x1719, 0x0000, 0x0000, 0x11CA, 0x121A,
6823 0x0B36, 0x0B86, 0x0C76, 0x0CC6, 0x0D19, 0x0000, 0x0000, 0x0000};
6824
6825 /* 2160-217F */
6826 static const uint16 uni_2160_217F[32] = {
6827 0x0739, 0x0789, 0x07D9, 0x0829, 0x0879, 0x08C9, 0x0919, 0x0969,
6828 0x09B9, 0x0A09, 0x0A59, 0x0AA9, 0x0AF9, 0x0B49, 0x0B99, 0x0BE9,
6829 0x1139, 0x1189, 0x11D9, 0x1229, 0x1279, 0x12C9, 0x1319, 0x1369,
6830 0x13B9, 0x1409, 0x1459, 0x14A9, 0x14F9, 0x1549, 0x1599, 0x15E9};
6831
6832 /* 24B0-24EF */
6833 static const uint16 uni_24B0_24EF[64] = {
6834 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0511, 0x0512,
6835 0x0513, 0x0514, 0x0515, 0x0516, 0x0517, 0x0518, 0x0519, 0x051A,
6836 0x051B, 0x051C, 0x051D, 0x051E, 0x051F, 0x0520, 0x0521, 0x0522,
6837 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, 0x0528, 0x0529, 0x052A,
6838 0x0531, 0x0532, 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538,
6839 0x0539, 0x053A, 0x053B, 0x053C, 0x053D, 0x053E, 0x053F, 0x0540,
6840 0x0541, 0x0542, 0x0543, 0x0544, 0x0545, 0x0546, 0x0547, 0x0548,
6841 0x0549, 0x054A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
6842
6843 /* FF20-FF5F */
6844 static const uint16 uni_FF20_FF5F[64] = {
6845 0x0000, 0x0560, 0x05B0, 0x0600, 0x0650, 0x06A0, 0x06F0, 0x0740,
6846 0x0790, 0x07E0, 0x0830, 0x0880, 0x08D0, 0x0920, 0x0970, 0x09C0,
6847 0x0A10, 0x0A60, 0x0AB0, 0x0B00, 0x0B50, 0x0BA0, 0x0BF0, 0x0C40,
6848 0x0C90, 0x0CE0, 0x0D30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6849 0x0000, 0x0F60, 0x0FB0, 0x1000, 0x1050, 0x10A0, 0x10F0, 0x1140,
6850 0x1190, 0x11E0, 0x1230, 0x1280, 0x12D0, 0x1320, 0x1370, 0x13C0,
6851 0x1410, 0x1460, 0x14B0, 0x1500, 0x1550, 0x15A0, 0x15F0, 0x1640,
6852 0x1690, 0x16E0, 0x1730, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
6853
6854 /*
6855 Returns
6856 a number 0..15, if a valid HEX digit in lower case,
6857 -1 otherwise.
6858 */
6859
6860 6100588 static int hexlo(int x) {
6861 static signed char hex_lo_digit[256] = {
6862 -1, -1, -1, -1, -1, -1, -1, -1,
6863 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6864 -1, -1, -1, -1, -1, -1, -1, -1,
6865 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6866 -1, -1, -1, -1, -1, -1, -1, -1,
6867 -1, -1, -1, -1, -1, -1, -1, -1, /* !"#$%&'()*+,-./ */
6868 0, 1, 2, 3, 4, 5, 6, 7,
6869 8, 9, -1, -1, -1, -1, -1, -1, /* 0123456789:;<=>? */
6870 -1, -1, -1, -1, -1, -1, -1, -1,
6871 -1, -1, -1, -1, -1, -1, -1, -1, /* @ABCDEFGHIJKLMNO */
6872 -1, -1, -1, -1, -1, -1, -1, -1,
6873 -1, -1, -1, -1, -1, -1, -1, -1, /* PQRSTUVWXYZ[\]^_ */
6874 -1, 10, 11, 12, 13, 14, 15, -1,
6875 -1, -1, -1, -1, -1, -1, -1, -1, /* `abcdefghijklmno */
6876 -1, -1, -1, -1, -1, -1, -1, -1,
6877 -1, -1, -1, -1, -1, -1, -1, -1, /* pqrstuvwxyz{|}~. */
6878 -1, -1, -1, -1, -1, -1, -1, -1,
6879 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6880 -1, -1, -1, -1, -1, -1, -1, -1,
6881 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6882 -1, -1, -1, -1, -1, -1, -1, -1,
6883 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6884 -1, -1, -1, -1, -1, -1, -1, -1,
6885 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6886 -1, -1, -1, -1, -1, -1, -1, -1,
6887 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6888 -1, -1, -1, -1, -1, -1, -1, -1,
6889 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6890 -1, -1, -1, -1, -1, -1, -1, -1,
6891 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6892 -1, -1, -1, -1, -1, -1, -1, -1,
6893 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6894 };
6895 6100588 return hex_lo_digit[(unsigned int)x];
6896 }
6897
6898 /*
6899 Safe characters:
6900 '\0' NULL
6901 A..Z capital letters,
6902 a..z small letters
6903 0..9 digits
6904 _ underscore
6905 */
6906 static const char filename_safe_char[128] = {
6907 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
6908 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
6909 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* !"#$%&'()*+,-./ */
6910 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 0123456789:;<=>? */
6911 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* @ABCDEFGHIJKLMNO */
6912 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* PQRSTUVWXYZ[\]^_ */
6913 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* `abcdefghijklmno */
6914 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* pqrstuvwxyz{|}~. */
6915 };
6916
6917 #define MY_FILENAME_ESCAPE '@'
6918
6919 extern "C" {
6920 409430084 static int my_mb_wc_filename(const CHARSET_INFO *cs [[maybe_unused]],
6921 my_wc_t *pwc, const uchar *s, const uchar *e) {
6922 int byte1, byte2;
6923
2/2
✓ Branch 0 taken 44512694 times.
✓ Branch 1 taken 364917390 times.
409430084 if (s >= e) return MY_CS_TOOSMALL;
6924
6925
3/4
✓ Branch 0 taken 364917877 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 362840840 times.
✓ Branch 3 taken 2077037 times.
364917390 if (*s < 128 && filename_safe_char[*s]) {
6926 362840840 *pwc = *s;
6927 362840840 return 1;
6928 }
6929
6930
2/2
✓ Branch 0 taken 540335 times.
✓ Branch 1 taken 1536215 times.
2076550 if (*s != MY_FILENAME_ESCAPE) return MY_CS_ILSEQ;
6931
6932
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1536213 times.
1536215 if (s + 3 > e) return MY_CS_TOOSMALL3;
6933
6934 1536213 byte1 = s[1];
6935
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1536213 times.
1536213 if (byte1 == 0) return MY_CS_ILSEQ; /* avoid possible out-of-bounds read */
6936 1536213 byte2 = s[2];
6937
6938
4/8
✓ Branch 0 taken 1536783 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1536783 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1536783 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1536783 times.
✗ Branch 7 not taken.
1536213 if (byte1 >= 0x30 && byte1 <= 0x7F && byte2 >= 0x30 && byte2 <= 0x7F) {
6939 1536783 int code = (byte1 - 0x30) * 80 + byte2 - 0x30;
6940
3/4
✓ Branch 0 taken 1536783 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 11576 times.
✓ Branch 3 taken 1525207 times.
1536783 if (code < 5994 && touni[code]) {
6941 11576 *pwc = touni[code];
6942 11576 return 3;
6943 }
6944
3/4
✓ Branch 0 taken 60 times.
✓ Branch 1 taken 1525147 times.
✓ Branch 2 taken 60 times.
✗ Branch 3 not taken.
1525207 if (byte1 == '@' && byte2 == '@') {
6945 60 *pwc = 0;
6946 60 return 3;
6947 }
6948 }
6949
6950
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1524577 times.
1524577 if (s + 4 > e) return MY_CS_TOOSMALL4;
6951
6952
3/6
✓ Branch 0 taken 1525147 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1525147 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1525147 times.
✗ Branch 5 not taken.
1524577 if ((byte1 = hexlo(byte1)) >= 0 && (byte2 = hexlo(byte2)) >= 0) {
6953 1525147 int byte3 = hexlo(s[3]);
6954 1525147 int byte4 = hexlo(s[4]);
6955
2/4
✓ Branch 0 taken 1525147 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1525147 times.
✗ Branch 3 not taken.
1525147 if (byte3 >= 0 && byte4 >= 0) {
6956 1525147 *pwc = (byte1 << 12) + (byte2 << 8) + (byte3 << 4) + byte4;
6957 1525147 return 5;
6958 }
6959 }
6960
6961 return MY_CS_ILSEQ;
6962 }
6963
6964 82907289 static int my_wc_mb_filename(const CHARSET_INFO *cs [[maybe_unused]],
6965 my_wc_t wc, uchar *s, uchar *e) {
6966 int code;
6967 82907289 char hex[] = "0123456789abcdef";
6968
6969
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 82907289 times.
82907289 if (s >= e) return MY_CS_TOOSMALL;
6970
6971
4/4
✓ Branch 0 taken 82881553 times.
✓ Branch 1 taken 25736 times.
✓ Branch 2 taken 82689157 times.
✓ Branch 3 taken 192396 times.
82907289 if (wc < 128 && filename_safe_char[wc]) {
6972 82689157 *s = (uchar)wc;
6973 82689157 return 1;
6974 }
6975
6976
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 218132 times.
218132 if (s + 3 > e) return MY_CS_TOOSMALL3;
6977
6978 218132 *s++ = MY_FILENAME_ESCAPE;
6979
5/6
✓ Branch 0 taken 1458 times.
✓ Branch 1 taken 24128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1458 times.
✓ Branch 4 taken 24058 times.
✓ Branch 5 taken 192616 times.
218132 if ((wc >= 0x00C0 && wc <= 0x05FF && (code = uni_0C00_05FF[wc - 0x00C0])) ||
6980
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 24058 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 24028 times.
✓ Branch 5 taken 192646 times.
216674 (wc >= 0x1E00 && wc <= 0x1FFF && (code = uni_1E00_1FFF[wc - 0x1E00])) ||
6981
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 24028 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 23947 times.
✓ Branch 5 taken 192727 times.
216674 (wc >= 0x2160 && wc <= 0x217F && (code = uni_2160_217F[wc - 0x2160])) ||
6982
7/10
✓ Branch 0 taken 25586 times.
✓ Branch 1 taken 192546 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23947 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 8784 times.
✓ Branch 7 taken 207890 times.
✓ Branch 8 taken 5801 times.
✓ Branch 9 taken 212331 times.
445048 (wc >= 0x24B0 && wc <= 0x24EF && (code = uni_24B0_24EF[wc - 0x24B0])) ||
6983
3/4
✓ Branch 0 taken 4343 times.
✓ Branch 1 taken 4441 times.
✓ Branch 2 taken 4343 times.
✗ Branch 3 not taken.
8784 (wc >= 0xFF20 && wc <= 0xFF5F && (code = uni_FF20_FF5F[wc - 0xFF20]))) {
6984 5801 *s++ = (code / 80) + 0x30;
6985 5801 *s++ = (code % 80) + 0x30;
6986 5801 return 3;
6987 }
6988
6989 /* Non letter */
6990
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212331 times.
212331 if (s + 5 > e) return MY_CS_TOOSMALL5;
6991
6992 212331 *s++ = hex[(wc >> 12) & 15];
6993 212331 *s++ = hex[(wc >> 8) & 15];
6994 212331 *s++ = hex[(wc >> 4) & 15];
6995 212331 *s++ = hex[(wc)&15];
6996 212331 return 5;
6997 }
6998 } // extern "C"
6999
7000 static MY_COLLATION_HANDLER my_collation_filename_handler = {
7001 nullptr, /* init */
7002 nullptr,
7003 my_strnncoll_utf8mb3,
7004 my_strnncollsp_utf8mb3,
7005 my_strnxfrm_unicode,
7006 my_strnxfrmlen_utf8mb3,
7007 my_like_range_mb,
7008 my_wildcmp_utf8mb3,
7009 my_strcasecmp_utf8mb3,
7010 my_instr_mb,
7011 my_hash_sort_utf8mb3,
7012 my_propagate_complex};
7013
7014 static MY_CHARSET_HANDLER my_charset_filename_handler = {
7015 nullptr, /* init */
7016 my_ismbchar_utf8mb3,
7017 my_mbcharlen_utf8mb3,
7018 my_numchars_mb,
7019 my_charpos_mb3,
7020 my_well_formed_len_mb,
7021 my_lengthsp_8bit,
7022 my_numcells_mb,
7023 my_mb_wc_filename,
7024 my_wc_mb_filename,
7025 my_mb_ctype_mb,
7026 my_caseup_str_utf8mb3,
7027 my_casedn_str_utf8mb3,
7028 my_caseup_utf8mb3,
7029 my_casedn_utf8mb3,
7030 my_snprintf_8bit,
7031 my_long10_to_str_8bit,
7032 my_longlong10_to_str_8bit,
7033 my_fill_8bit,
7034 my_strntol_8bit,
7035 my_strntoul_8bit,
7036 my_strntoll_8bit,
7037 my_strntoull_8bit,
7038 my_strntod_8bit,
7039 my_strtoll10_8bit,
7040 my_strntoull10rnd_8bit,
7041 my_scan_8bit};
7042
7043 CHARSET_INFO my_charset_filename = {
7044 17,
7045 0,
7046 0, /* number */
7047 MY_CS_COMPILED | MY_CS_PRIMARY | MY_CS_STRNXFRM | MY_CS_UNICODE |
7048 MY_CS_HIDDEN | MY_CS_NONASCII,
7049 "filename", /* cs name */
7050 "filename", /* m_coll_name */
7051 "", /* comment */
7052 nullptr, /* tailoring */
7053 nullptr, /* coll_param */
7054 ctype_utf8mb3, /* ctype */
7055 to_lower_utf8mb3, /* to_lower */
7056 to_upper_utf8mb3, /* to_upper */
7057 to_upper_utf8mb3, /* sort_order */
7058 nullptr, /* uca */
7059 nullptr, /* tab_to_uni */
7060 nullptr, /* tab_from_uni */
7061 &my_unicase_default, /* caseinfo */
7062 nullptr, /* state_map */
7063 nullptr, /* ident_map */
7064 1, /* strxfrm_multiply */
7065 1, /* caseup_multiply */
7066 1, /* casedn_multiply */
7067 1, /* mbminlen */
7068 5, /* mbmaxlen */
7069 1, /* mbmaxlenlen */
7070 0, /* min_sort_char */
7071 0xFFFF, /* max_sort_char */
7072 ' ', /* pad char */
7073 false, /* escape_with_backslash_is_dangerous */
7074 1, /* levels_for_compare */
7075 &my_charset_filename_handler,
7076 &my_collation_filename_handler,
7077 PAD_SPACE};
7078
7079 /*
7080 We consider bytes with code more than 127 as a letter.
7081 This guarantees that word boundaries work fine with regular
7082 expressions. Note, there is no need to mark byte 255 as a
7083 letter, it is illegal byte in UTF8.
7084 */
7085 static const uchar ctype_utf8mb4[] = {
7086 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32,
7087 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
7088 32, 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
7089 16, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 16, 16, 16, 16, 16,
7090 16, 16, 129, 129, 129, 129, 129, 129, 1, 1, 1, 1, 1, 1, 1, 1,
7091 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16,
7092 16, 16, 130, 130, 130, 130, 130, 130, 2, 2, 2, 2, 2, 2, 2, 2,
7093 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16,
7094 32, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7095 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7096 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7097 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7098 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7099 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7100 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7101 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7102 0};
7103
7104 static const uchar to_lower_utf8mb4[] = {
7105 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
7106 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
7107 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
7108 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
7109 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
7110 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
7111 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
7112 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
7113 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
7114 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
7115 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
7116 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
7117 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
7118 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
7119 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
7120 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
7121 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
7122 255};
7123
7124 static const uchar to_upper_utf8mb4[] = {
7125 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
7126 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
7127 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
7128 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
7129 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
7130 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
7131 90, 91, 92, 93, 94, 95, 96, 65, 66, 67, 68, 69, 70, 71, 72,
7132 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
7133 88, 89, 90, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
7134 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
7135 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
7136 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
7137 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
7138 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
7139 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
7140 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
7141 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
7142 255};
7143
7144 static inline int bincmp_utf8mb4(const uchar *s, const uchar *se,
7145 const uchar *t, const uchar *te) {
7146 int slen = (int)(se - s), tlen = (int)(te - t);
7147 int len = std::min(slen, tlen);
7148 int cmp = memcmp(s, t, len);
7149 return cmp ? cmp : slen - tlen;
7150 }
7151
7152 extern "C" {
7153
7154 /**
7155 A thunk to be able to use my_mb_wc_utf8mb3 in MY_CHARSET_HANDLER structs.
7156
7157 @param cs Unused.
7158 @param pwc [output] The parsed character, if any.
7159 @param s The string to read from.
7160 @param e The end of the string; will not read past this.
7161
7162 @return The number of bytes read from s, or a value <= 0 for failure
7163 (see m_ctype.h).
7164 */
7165 1083203686 int my_mb_wc_utf8mb3_thunk(const CHARSET_INFO *cs [[maybe_unused]],
7166 my_wc_t *pwc, const uchar *s, const uchar *e) {
7167 1083203686 return my_mb_wc_utf8mb3(pwc, s, e);
7168 }
7169
7170 /**
7171 A thunk to be able to use my_mb_wc_utf8mb4 in MY_CHARSET_HANDLER structs.
7172
7173 @param cs Unused.
7174 @param pwc [output] The parsed character, if any.
7175 @param s The string to read from.
7176 @param e The end of the string; will not read past this.
7177
7178 @return The number of bytes read from s, or a value <= 0 for failure
7179 (see m_ctype.h).
7180 */
7181
2/2
✓ Branch 0 taken 34026870 times.
✓ Branch 1 taken 5345100810 times.
5379127680 int my_mb_wc_utf8mb4_thunk(const CHARSET_INFO *cs [[maybe_unused]],
7182 my_wc_t *pwc, const uchar *s, const uchar *e) {
7183 5379127680 return my_mb_wc_utf8mb4(pwc, s, e);
7184 }
7185
7186 } // extern "C"
7187
7188 /*
7189 The same as above, but without range check
7190 for example, for a null-terminated string
7191 */
7192 23546451 static int my_mb_wc_utf8mb4_no_range(const CHARSET_INFO *cs [[maybe_unused]],
7193 my_wc_t *pwc, const uchar *s) {
7194 23546451 return my_mb_wc_utf8_prototype</*RANGE_CHECK=*/false, /*SUPPORT_MB4=*/true>(
7195 23546451 pwc, s, nullptr);
7196 }
7197
7198 extern "C" {
7199 1079751941 static int my_wc_mb_utf8mb4(const CHARSET_INFO *cs [[maybe_unused]], my_wc_t wc,
7200 uchar *r, uchar *e) {
7201 int count;
7202
7203
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 1079751921 times.
1079751941 if (r >= e) return MY_CS_TOOSMALL;
7204
7205
2/2
✓ Branch 0 taken 971822109 times.
✓ Branch 1 taken 107929812 times.
1079751921 if (wc < 0x80)
7206 971822109 count = 1;
7207
2/2
✓ Branch 0 taken 570877 times.
✓ Branch 1 taken 107358935 times.
107929812 else if (wc < 0x800)
7208 570877 count = 2;
7209
2/2
✓ Branch 0 taken 6690345 times.
✓ Branch 1 taken 100668590 times.
107358935 else if (wc < 0x10000)
7210 6690345 count = 3;
7211
1/2
✓ Branch 0 taken 100668630 times.
✗ Branch 1 not taken.
100668590 else if (wc < 0x200000)
7212 100668630 count = 4;
7213 else
7214 return MY_CS_ILUNI;
7215
7216
2/2
✓ Branch 0 taken 111 times.
✓ Branch 1 taken 1079751850 times.
1079751961 if (r + count > e) return MY_CS_TOOSMALLN(count);
7217
7218
5/5
✓ Branch 0 taken 100668630 times.
✓ Branch 1 taken 6690246 times.
✓ Branch 2 taken 570865 times.
✓ Branch 3 taken 971822100 times.
✓ Branch 4 taken 9 times.
1079751850 switch (count) {
7219 100668630 case 4:
7220 100668630 r[3] = (uchar)(0x80 | (wc & 0x3f));
7221 100668630 wc = wc >> 6;
7222 100668630 wc |= 0x10000;
7223 [[fallthrough]];
7224 107358876 case 3:
7225 107358876 r[2] = (uchar)(0x80 | (wc & 0x3f));
7226 107358876 wc = wc >> 6;
7227 107358876 wc |= 0x800;
7228 [[fallthrough]];
7229 107929741 case 2:
7230 107929741 r[1] = (uchar)(0x80 | (wc & 0x3f));
7231 107929741 wc = wc >> 6;
7232 107929741 wc |= 0xc0;
7233 [[fallthrough]];
7234 1079751841 case 1:
7235 1079751841 r[0] = (uchar)wc;
7236 }
7237 1079751850 return count;
7238 }
7239 } // extern "C"
7240
7241 /*
7242 The same as above, but without range check.
7243 */
7244 23556396 static int my_wc_mb_utf8mb4_no_range(const CHARSET_INFO *cs [[maybe_unused]],
7245 my_wc_t wc, uchar *r) {
7246 int count;
7247
7248
2/2
✓ Branch 0 taken 23556059 times.
✓ Branch 1 taken 337 times.
23556396 if (wc < 0x80)
7249 23556059 count = 1;
7250
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 237 times.
337 else if (wc < 0x800)
7251 100 count = 2;
7252
1/2
✓ Branch 0 taken 291 times.
✗ Branch 1 not taken.
237 else if (wc < 0x10000)
7253 291 count = 3;
7254 else if (wc < 0x200000)
7255 count = 4;
7256 else
7257 return MY_CS_ILUNI;
7258
7259
3/5
✗ Branch 0 not taken.
✓ Branch 1 taken 291 times.
✓ Branch 2 taken 100 times.
✓ Branch 3 taken 23556399 times.
✗ Branch 4 not taken.
23556450 switch (count) {
7260 case 4:
7261 r[3] = (uchar)(0x80 | (wc & 0x3f));
7262 wc = wc >> 6;
7263 wc |= 0x10000;
7264 [[fallthrough]];
7265 291 case 3:
7266 291 r[2] = (uchar)(0x80 | (wc & 0x3f));
7267 291 wc = wc >> 6;
7268 291 wc |= 0x800;
7269 [[fallthrough]];
7270 391 case 2:
7271 391 r[1] = (uchar)(0x80 | (wc & 0x3f));
7272 391 wc = wc >> 6;
7273 391 wc |= 0xc0;
7274 [[fallthrough]];
7275 23556790 case 1:
7276 23556790 r[0] = (uchar)wc;
7277 }
7278 23556450 return count;
7279 }
7280
7281 29002768 static inline void my_tolower_utf8mb4(const MY_UNICASE_INFO *uni_plane,
7282 my_wc_t *wc) {
7283
1/2
✓ Branch 0 taken 29003065 times.
✗ Branch 1 not taken.
29002768 if (*wc <= uni_plane->maxchar) {
7284 const MY_UNICASE_CHARACTER *page;
7285
2/2
✓ Branch 0 taken 27706712 times.
✓ Branch 1 taken 1296353 times.
29003065 if ((page = uni_plane->page[(*wc >> 8)])) *wc = page[*wc & 0xFF].tolower;
7286 }
7287 29002768 }
7288
7289 8897770 static inline void my_toupper_utf8mb4(const MY_UNICASE_INFO *uni_plane,
7290 my_wc_t *wc) {
7291
2/2
✓ Branch 0 taken 8897768 times.
✓ Branch 1 taken 2 times.
8897770 if (*wc <= uni_plane->maxchar) {
7292 const MY_UNICASE_CHARACTER *page;
7293
2/2
✓ Branch 0 taken 7601778 times.
✓ Branch 1 taken 1295990 times.
8897768 if ((page = uni_plane->page[(*wc >> 8)])) *wc = page[*wc & 0xFF].toupper;
7294 }
7295 8897770 }
7296
7297 extern "C" {
7298 1318312 static size_t my_caseup_utf8mb4(const CHARSET_INFO *cs, char *src,
7299 size_t srclen, char *dst, size_t dstlen) {
7300 my_wc_t wc;
7301 int srcres, dstres;
7302 1318312 char *srcend = src + srclen, *dstend = dst + dstlen, *dst0 = dst;
7303 1318312 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7304
2/4
✓ Branch 0 taken 1318312 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1318312 times.
1318312 assert(src != dst || cs->caseup_multiply == 1);
7305
7306
4/4
✓ Branch 0 taken 8897770 times.
✓ Branch 1 taken 1318235 times.
✓ Branch 2 taken 8897770 times.
✓ Branch 3 taken 1318235 times.
19113775 while ((src < srcend) &&
7307
1/2
✓ Branch 0 taken 8897770 times.
✗ Branch 1 not taken.
8897770 (srcres = my_mb_wc_utf8mb4(&wc, (uchar *)src, (uchar *)srcend)) > 0) {
7308 8897770 my_toupper_utf8mb4(uni_plane, &wc);
7309
2/2
✓ Branch 0 taken 77 times.
✓ Branch 1 taken 8897693 times.
8897770 if ((dstres = my_wc_mb_utf8mb4(cs, wc, (uchar *)dst, (uchar *)dstend)) <= 0)
7310 77 break;
7311 8897693 src += srcres;
7312 8897693 dst += dstres;
7313 }
7314 1318312 return (size_t)(dst - dst0);
7315 }
7316
7317 78 static void my_hash_sort_utf8mb4(const CHARSET_INFO *cs, const uchar *s,
7318 size_t slen, uint64 *n1, uint64 *n2) {
7319 my_wc_t wc;
7320 int res;
7321 78 const uchar *e = s + slen;
7322 78 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7323 uint64 tmp1;
7324 uint64 tmp2;
7325 uint ch;
7326
7327 /*
7328 Remove end space. We do this to be able to compare
7329 'A ' and 'A' as identical
7330 */
7331
4/4
✓ Branch 0 taken 2349 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2279 times.
✓ Branch 3 taken 70 times.
2357 while (e > s && e[-1] == ' ') e--;
7332
7333 78 tmp1 = *n1;
7334 78 tmp2 = *n2;
7335
7336
2/2
✓ Branch 0 taken 578 times.
✓ Branch 1 taken 78 times.
734 while ((res = my_mb_wc_utf8mb4(&wc, s, e)) > 0) {
7337 578 my_tosort_unicode(uni_plane, &wc, cs->state);
7338
7339 578 ch = (wc & 0xFF);
7340 578 tmp1 ^= (((tmp1 & 63) + tmp2) * ch) + (tmp1 << 8);
7341 578 tmp2 += 3;
7342
7343 578 ch = (wc >> 8) & 0xFF;
7344 578 tmp1 ^= (((tmp1 & 63) + tmp2) * ch) + (tmp1 << 8);
7345 578 tmp2 += 3;
7346
7347
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 578 times.
578 if (wc > 0xFFFF) {
7348 /*
7349 Put the highest byte only if it is non-zero,
7350 to make hash functions for utf8mb3 and utf8mb4
7351 compatible for BMP characters.
7352 This is useful to keep order of records in
7353 test results, e.g. for "SHOW GRANTS".
7354 */
7355 ch = (wc >> 16) & 0xFF;
7356 tmp1 ^= (((tmp1 & 63) + tmp2) * ch) + (tmp1 << 8);
7357 tmp2 += 3;
7358 }
7359 578 s += res;
7360 }
7361
7362 78 *n1 = tmp1;
7363 78 *n2 = tmp2;
7364 78 }
7365
7366 static size_t my_caseup_str_utf8mb4(const CHARSET_INFO *cs, char *src) {
7367 my_wc_t wc;
7368 int srcres, dstres;
7369 char *dst = src, *dst0 = src;
7370 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7371 assert(cs->caseup_multiply == 1);
7372
7373 while (*src &&
7374 (srcres = my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *)src)) > 0) {
7375 my_toupper_utf8mb4(uni_plane, &wc);
7376 if ((dstres = my_wc_mb_utf8mb4_no_range(cs, wc, (uchar *)dst)) <= 0) break;
7377 src += srcres;
7378 dst += dstres;
7379 }
7380 *dst = '\0';
7381 return (size_t)(dst - dst0);
7382 }
7383
7384 1602429 static size_t my_casedn_utf8mb4(const CHARSET_INFO *cs, char *src,
7385 size_t srclen, char *dst, size_t dstlen) {
7386 my_wc_t wc;
7387 int srcres, dstres;
7388 1602429 char *srcend = src + srclen, *dstend = dst + dstlen, *dst0 = dst;
7389 1602429 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7390
2/4
✓ Branch 0 taken 1602429 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1602429 times.
1602429 assert(src != dst || cs->casedn_multiply == 1);
7391
7392
4/4
✓ Branch 0 taken 5446375 times.
✓ Branch 1 taken 1602407 times.
✓ Branch 2 taken 5446375 times.
✓ Branch 3 taken 1602407 times.
12495157 while ((src < srcend) &&
7393
1/2
✓ Branch 0 taken 5446375 times.
✗ Branch 1 not taken.
5446375 (srcres = my_mb_wc_utf8mb4(&wc, (uchar *)src, (uchar *)srcend)) > 0) {
7394 5446375 my_tolower_utf8mb4(uni_plane, &wc);
7395
2/2
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 5446353 times.
5446375 if ((dstres = my_wc_mb_utf8mb4(cs, wc, (uchar *)dst, (uchar *)dstend)) <= 0)
7396 22 break;
7397 5446353 src += srcres;
7398 5446353 dst += dstres;
7399 }
7400 1602429 return (size_t)(dst - dst0);
7401 }
7402
7403 1457958 static size_t my_casedn_str_utf8mb4(const CHARSET_INFO *cs, char *src) {
7404 my_wc_t wc;
7405 int srcres, dstres;
7406 1457958 char *dst = src, *dst0 = src;
7407 1457958 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7408
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1457958 times.
1457958 assert(cs->casedn_multiply == 1);
7409
7410
4/4
✓ Branch 0 taken 23556647 times.
✓ Branch 1 taken 1457819 times.
✓ Branch 2 taken 23556500 times.
✓ Branch 3 taken 1458098 times.
48571245 while (*src &&
7411
3/4
✓ Branch 0 taken 23556779 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 23556485 times.
✓ Branch 3 taken 294 times.
23556647 (srcres = my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *)src)) > 0) {
7412 23556500 my_tolower_utf8mb4(uni_plane, &wc);
7413
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23556508 times.
23556429 if ((dstres = my_wc_mb_utf8mb4_no_range(cs, wc, (uchar *)dst)) <= 0) break;
7414 23556508 src += srcres;
7415 23556508 dst += dstres;
7416 }
7417
7418 /*
7419 In rare cases lower string can be shorter than
7420 the original string, for example:
7421
7422 "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
7423 (which is 0xC4B0 in utf8, i.e. two bytes)
7424
7425 is converted into
7426
7427 "U+0069 LATIN SMALL LETTER I"
7428 (which is 0x69 in utf8, i.e. one byte)
7429
7430 So, we need to put '\0' terminator after converting.
7431 */
7432
7433 1458098 *dst = '\0';
7434 1458098 return (size_t)(dst - dst0);
7435 }
7436
7437 9 static int my_strnncoll_utf8mb4(const CHARSET_INFO *cs, const uchar *s,
7438 size_t slen, const uchar *t, size_t tlen,
7439 bool t_is_prefix) {
7440 9 my_wc_t s_wc = 0;
7441 9 my_wc_t t_wc = 0;
7442 9 const uchar *se = s + slen;
7443 9 const uchar *te = t + tlen;
7444 9 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7445
7446
3/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✓ Branch 3 taken 3 times.
12 while (s < se && t < te) {
7447
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 int s_res = my_mb_wc_utf8mb4(&s_wc, s, se);
7448 9 int t_res = my_mb_wc_utf8mb4(&t_wc, t, te);
7449
7450
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 9 times.
9 if (s_res <= 0 || t_res <= 0) {
7451 /* Incorrect string, compare bytewise */
7452 return bincmp_utf8mb4(s, se, t, te);
7453 }
7454
7455 9 my_tosort_unicode(uni_plane, &s_wc, cs->state);
7456 9 my_tosort_unicode(uni_plane, &t_wc, cs->state);
7457
7458
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 3 times.
9 if (s_wc != t_wc) {
7459
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
6 return s_wc > t_wc ? 1 : -1;
7460 }
7461
7462 3 s += s_res;
7463 3 t += t_res;
7464 }
7465
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 return (int)(t_is_prefix ? (t - te) : ((se - s) - (te - t)));
7466 }
7467
7468 /**
7469
7470 Compare strings, discarding end space
7471
7472 If one string is shorter as the other, then we space extend the other
7473 so that the strings have equal length.
7474
7475 This will ensure that the following things hold:
7476
7477 "a" == "a "
7478 "a\0" < "a"
7479 "a\0" < "a "
7480
7481 @param cs Character set pinter.
7482 @param s First string to compare.
7483 @param slen Length of 's'.
7484 @param t Second string to compare.
7485 @param tlen Length of 't'.
7486
7487 @return Comparison result.
7488 @retval Negative number, if a less than b.
7489 @retval 0, if a is equal to b
7490 @retval Positive number, if a > b
7491 */
7492
7493 5258 static int my_strnncollsp_utf8mb4(const CHARSET_INFO *cs, const uchar *s,
7494 size_t slen, const uchar *t, size_t tlen) {
7495 int res;
7496 5258 my_wc_t s_wc = 0;
7497 5258 my_wc_t t_wc = 0;
7498 5258 const uchar *se = s + slen, *te = t + tlen;
7499 5258 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7500
7501
4/4
✓ Branch 0 taken 19967 times.
✓ Branch 1 taken 2266 times.
✓ Branch 2 taken 19913 times.
✓ Branch 3 taken 54 times.
22233 while (s < se && t < te) {
7502
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 19913 times.
19913 int s_res = my_mb_wc_utf8mb4(&s_wc, s, se);
7503 19913 int t_res = my_mb_wc_utf8mb4(&t_wc, t, te);
7504
7505
2/4
✓ Branch 0 taken 19913 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 19913 times.
19913 if (s_res <= 0 || t_res <= 0) {
7506 /* Incorrect string, compare bytewise */
7507 return bincmp_utf8mb4(s, se, t, te);
7508 }
7509
7510 19913 my_tosort_unicode(uni_plane, &s_wc, cs->state);
7511 19913 my_tosort_unicode(uni_plane, &t_wc, cs->state);
7512
7513
2/2
✓ Branch 0 taken 2938 times.
✓ Branch 1 taken 16975 times.
19913 if (s_wc != t_wc) {
7514
2/2
✓ Branch 0 taken 988 times.
✓ Branch 1 taken 1950 times.
2938 return s_wc > t_wc ? 1 : -1;
7515 }
7516
7517 16975 s += s_res;
7518 16975 t += t_res;
7519 }
7520
7521 2320 slen = (size_t)(se - s);
7522 2320 tlen = (size_t)(te - t);
7523 2320 res = 0;
7524
7525
2/2
✓ Branch 0 taken 93 times.
✓ Branch 1 taken 2227 times.
2320 if (slen != tlen) {
7526 93 int swap = 1;
7527
2/2
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 54 times.
93 if (slen < tlen) {
7528 39 slen = tlen;
7529 39 s = t;
7530 39 se = te;
7531 39 swap = -1;
7532 39 res = -res;
7533 }
7534 /*
7535 This following loop uses the fact that in UTF-8
7536 all multibyte characters are greater than space,
7537 and all multibyte head characters are greater than
7538 space. It means if we meet a character greater
7539 than space, it always means that the longer string
7540 is greater. So we can reuse the same loop from the
7541 8bit version, without having to process full multibute
7542 sequences.
7543 */
7544
2/2
✓ Branch 0 taken 764 times.
✓ Branch 1 taken 50 times.
814 for (; s < se; s++) {
7545
4/4
✓ Branch 0 taken 43 times.
✓ Branch 1 taken 721 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 37 times.
764 if (*s != ' ') return (*s < ' ') ? -swap : swap;
7546 }
7547 }
7548 2277 return res;
7549 }
7550 } // extern "C"
7551
7552 /**
7553 Compare 0-terminated UTF8 strings.
7554
7555 @param cs character set handler
7556 @param s First 0-terminated string to compare
7557 @param t Second 0-terminated string to compare
7558
7559 @return Comparison result.
7560 @retval negative number if s < t
7561 @retval positive number if s > t
7562 @retval 0 is the strings are equal
7563 */
7564
7565 extern "C" {
7566 16751 static int my_strcasecmp_utf8mb4(const CHARSET_INFO *cs, const char *s,
7567 const char *t) {
7568 16751 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7569
3/4
✓ Branch 0 taken 37819 times.
✓ Branch 1 taken 10534 times.
✓ Branch 2 taken 37819 times.
✗ Branch 3 not taken.
48353 while (s[0] && t[0]) {
7570 my_wc_t s_wc, t_wc;
7571
7572
1/2
✓ Branch 0 taken 37819 times.
✗ Branch 1 not taken.
37819 if ((uchar)s[0] < 128) {
7573 /*
7574 s[0] is between 0 and 127.
7575 It represents a single byte character.
7576 Convert it into weight according to collation.
7577 */
7578 37819 s_wc = plane00[(uchar)s[0]].tolower;
7579 37819 s++;
7580 } else {
7581 int res = my_mb_wc_utf8mb4_no_range(cs, &s_wc, (const uchar *)s);
7582
7583 /*
7584 In the case of wrong multibyte sequence we will
7585 call strcmp() for byte-to-byte comparison.
7586 */
7587
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
6217 if (res <= 0) return strcmp(s, t);
7588 s += res;
7589
7590 my_tolower_utf8mb4(uni_plane, &s_wc);
7591 }
7592
7593 /* Do the same for the second string */
7594
7595
1/2
✓ Branch 0 taken 37819 times.
✗ Branch 1 not taken.
37819 if ((uchar)t[0] < 128) {
7596 /* Convert single byte character into weight */
7597 37819 t_wc = plane00[(uchar)t[0]].tolower;
7598 37819 t++;
7599 } else {
7600 int res = my_mb_wc_utf8mb4_no_range(cs, &t_wc, (const uchar *)t);
7601 if (res <= 0) return strcmp(s, t);
7602 t += res;
7603
7604 my_tolower_utf8mb4(uni_plane, &t_wc);
7605 }
7606
7607 /* Now we have two weights, let's compare them */
7608
2/2
✓ Branch 0 taken 6217 times.
✓ Branch 1 taken 31602 times.
37819 if (s_wc != t_wc) return ((int)s_wc) - ((int)t_wc);
7609 }
7610 10534 return ((int)(uchar)s[0]) - ((int)(uchar)t[0]);
7611 }
7612
7613 127 static int my_wildcmp_utf8mb4(const CHARSET_INFO *cs, const char *str,
7614 const char *strend, const char *wildstr,
7615 const char *wildend, int escape, int w_one,
7616 int w_many) {
7617 254 return my_wildcmp_unicode(cs, str, strend, wildstr, wildend, escape, w_one,
7618 127 w_many, cs->caseinfo);
7619 }
7620
7621 25069 static size_t my_strnxfrmlen_utf8mb4(const CHARSET_INFO *cs [[maybe_unused]],
7622 size_t len) {
7623 // We really ought to have len % 4 == 0, but not all calling code conforms.
7624 25069 return ((len + 3) / 4) * 2;
7625 }
7626 } // extern "C"
7627
7628 static ALWAYS_INLINE int my_valid_mbcharlen_utf8mb4(const CHARSET_INFO *cs
7629 [[maybe_unused]],
7630 const uchar *s,
7631 const uchar *e) {
7632 my_wc_t wc; // Ignored.
7633 30994259793 return my_mb_wc_utf8_prototype</*RANGE_CHECK=*/true, /*SUPPORT_MB4=*/true>(
7634 61988519586 &wc, s, e);
7635 }
7636
7637 extern "C" {
7638 343856351 static size_t my_well_formed_len_utf8mb4(const CHARSET_INFO *cs, const char *b,
7639 const char *e, size_t pos,
7640 int *error) {
7641 343856351 const char *b_start = b;
7642 343856351 *error = 0;
7643
1/2
✓ Branch 0 taken 19959406251 times.
✗ Branch 1 not taken.
18504042940 while (pos) {
7644 int mb_len;
7645
7646 19959406251 if ((mb_len = my_valid_mbcharlen_utf8mb4(cs, pointer_cast<const uchar *>(b),
7647
2/2
✓ Branch 0 taken 302192814 times.
✓ Branch 1 taken 18160186589 times.
18462379403 pointer_cast<const uchar *>(e))) <=
7648 0) {
7649
2/2
✓ Branch 0 taken 4256 times.
✓ Branch 1 taken 302188558 times.
302192814 *error = b < e ? 1 : 0;
7650 302192814 break;
7651 }
7652 18160186589 b += mb_len;
7653 18160186589 pos--;
7654 }
7655 90931 return (size_t)(b - b_start);
7656 }
7657
7658 static uint ALWAYS_INLINE my_ismbchar_utf8mb4_inl(const CHARSET_INFO *cs,
7659 const char *b,
7660 const char *e) {
7661 12531880390 int res = my_valid_mbcharlen_utf8mb4(cs, (const uchar *)b, (const uchar *)e);
7662
4/4
✓ Branch 0 taken 292224 times.
✓ Branch 1 taken 203373636 times.
✓ Branch 2 taken 512786 times.
✓ Branch 3 taken 12327701744 times.
12531880390 return (res > 1) ? res : 0;
7663 }
7664
7665
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12328214530 times.
12328214530 static uint my_ismbchar_utf8mb4(const CHARSET_INFO *cs, const char *b,
7666 const char *e) {
7667 12328214530 return my_ismbchar_utf8mb4_inl(cs, b, e);
7668 }
7669
7670 66214204 size_t my_charpos_mb4(const CHARSET_INFO *cs, const char *pos, const char *end,
7671 size_t length) {
7672 // Fast path as long as we see ASCII characters only.
7673 66214204 size_t min_length = std::min<size_t>(end - pos, length);
7674 const char *safe_end =
7675 66214204 std::min(end, pos + min_length) - std::min<size_t>(7, min_length);
7676 66214205 const char *start = pos;
7677
2/2
✓ Branch 0 taken 1024691577 times.
✓ Branch 1 taken 66063654 times.
1090755231 while (pos < safe_end) {
7678 uint64_t data;
7679 1024691577 memcpy(&data, pos, sizeof(data));
7680
2/2
✓ Branch 0 taken 150551 times.
✓ Branch 1 taken 1024541026 times.
1024691577 if (data & 0x8080808080808080ULL) break;
7681 1024541026 pos += sizeof(data);
7682 1024541026 length -= sizeof(data);
7683 }
7684
7685
4/4
✓ Branch 0 taken 205697043 times.
✓ Branch 1 taken 64183022 times.
✓ Branch 2 taken 203665860 times.
✓ Branch 3 taken 2031183 times.
269880065 while (length && pos < end) {
7686 uint mb_len;
7687
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 203665860 times.
✓ Branch 2 taken 292224 times.
✓ Branch 3 taken 203373636 times.
407331720 pos += (mb_len = my_ismbchar_utf8mb4_inl(cs, pos, end)) ? mb_len : 1;
7688 203665860 length--;
7689 }
7690
2/2
✓ Branch 0 taken 2031188 times.
✓ Branch 1 taken 64183017 times.
66214205 return (size_t)(length ? end + 2 - start : pos - start);
7691 }
7692
7693 15838750015 static uint my_mbcharlen_utf8mb4(const CHARSET_INFO *cs [[maybe_unused]],
7694 uint c) {
7695
2/2
✓ Branch 0 taken 15726026469 times.
✓ Branch 1 taken 112723546 times.
15838750015 if (c < 0x80) return 1;
7696
2/2
✓ Branch 0 taken 57641692 times.
✓ Branch 1 taken 55081854 times.
112723546 if (c < 0xc2) return 0; /* Illegal mb head */
7697
2/2
✓ Branch 0 taken 26211993 times.
✓ Branch 1 taken 28869861 times.
55081854 if (c < 0xe0) return 2;
7698
2/2
✓ Branch 0 taken 14021638 times.
✓ Branch 1 taken 14848223 times.
28869861 if (c < 0xf0) return 3;
7699
2/2
✓ Branch 0 taken 6989677 times.
✓ Branch 1 taken 7858546 times.
14848223 if (c < 0xf8) return 4;
7700 7858546 return 0; /* Illegal mb head */
7701 ;
7702 }
7703 } // extern "C"
7704
7705 static MY_COLLATION_HANDLER my_collation_utf8mb4_general_ci_handler = {
7706 nullptr, /* init */
7707 nullptr,
7708 my_strnncoll_utf8mb4,
7709 my_strnncollsp_utf8mb4,
7710 my_strnxfrm_unicode,
7711 my_strnxfrmlen_utf8mb4,
7712 my_like_range_mb,
7713 my_wildcmp_utf8mb4,
7714 my_strcasecmp_utf8mb4,
7715 my_instr_mb,
7716 my_hash_sort_utf8mb4,
7717 my_propagate_complex};
7718
7719 static MY_COLLATION_HANDLER my_collation_utf8mb4_bin_handler = {
7720 nullptr, /* init */
7721 nullptr,
7722 my_strnncoll_mb_bin,
7723 my_strnncollsp_mb_bin,
7724 my_strnxfrm_unicode_full_bin,
7725 my_strnxfrmlen_unicode_full_bin,
7726 my_like_range_mb,
7727 my_wildcmp_mb_bin,
7728 my_strcasecmp_mb_bin,
7729 my_instr_mb,
7730 my_hash_sort_mb_bin,
7731 my_propagate_simple};
7732
7733 MY_CHARSET_HANDLER my_charset_utf8mb4_handler = {nullptr, /* init */
7734 my_ismbchar_utf8mb4,
7735 my_mbcharlen_utf8mb4,
7736 my_numchars_mb,
7737 my_charpos_mb4,
7738 my_well_formed_len_utf8mb4,
7739 my_lengthsp_8bit,
7740 my_numcells_mb,
7741 my_mb_wc_utf8mb4_thunk,
7742 my_wc_mb_utf8mb4,
7743 my_mb_ctype_mb,
7744 my_caseup_str_utf8mb4,
7745 my_casedn_str_utf8mb4,
7746 my_caseup_utf8mb4,
7747 my_casedn_utf8mb4,
7748 my_snprintf_8bit,
7749 my_long10_to_str_8bit,
7750 my_longlong10_to_str_8bit,
7751 my_fill_8bit,
7752 my_strntol_8bit,
7753 my_strntoul_8bit,
7754 my_strntoll_8bit,
7755 my_strntoull_8bit,
7756 my_strntod_8bit,
7757 my_strtoll10_8bit,
7758 my_strntoull10rnd_8bit,
7759 my_scan_8bit};
7760
7761 CHARSET_INFO my_charset_utf8mb4_general_ci = {
7762 45,
7763 0,
7764 0, /* number */
7765 MY_CS_COMPILED | MY_CS_STRNXFRM | MY_CS_UNICODE |
7766 MY_CS_UNICODE_SUPPLEMENT, /* state */
7767 MY_UTF8MB4, /* cs name */
7768 MY_UTF8MB4_GENERAL_CI, /* m_coll_name */
7769 "UTF-8 Unicode", /* comment */
7770 nullptr, /* tailoring */
7771 nullptr, /* coll_param */
7772 ctype_utf8mb4, /* ctype */
7773 to_lower_utf8mb4, /* to_lower */
7774 to_upper_utf8mb4, /* to_upper */
7775 to_upper_utf8mb4, /* sort_order */
7776 nullptr, /* uca */
7777 nullptr, /* tab_to_uni */
7778 nullptr, /* tab_from_uni */
7779 &my_unicase_default, /* caseinfo */
7780 nullptr, /* state_map */
7781 nullptr, /* ident_map */
7782 1, /* strxfrm_multiply */
7783 1, /* caseup_multiply */
7784 1, /* casedn_multiply */
7785 1, /* mbminlen */
7786 4, /* mbmaxlen */
7787 1, /* mbmaxlenlen */
7788 0, /* min_sort_char */
7789 0xFFFF, /* max_sort_char */
7790 ' ', /* pad char */
7791 false, /* escape_with_backslash_is_dangerous */
7792 1, /* levels_for_compare */
7793 &my_charset_utf8mb4_handler,
7794 &my_collation_utf8mb4_general_ci_handler,
7795 PAD_SPACE};
7796
7797 CHARSET_INFO my_charset_utf8mb4_bin = {
7798 46,
7799 0,
7800 0, /* number */
7801 MY_CS_COMPILED | MY_CS_BINSORT | MY_CS_STRNXFRM | MY_CS_UNICODE |
7802 MY_CS_UNICODE_SUPPLEMENT, /* state */
7803 MY_UTF8MB4, /* cs name */
7804 MY_UTF8MB4_BIN, /* m_coll_name */
7805 "UTF-8 Unicode", /* comment */
7806 nullptr, /* tailoring */
7807 nullptr, /* coll_param */
7808 ctype_utf8mb4, /* ctype */
7809 to_lower_utf8mb4, /* to_lower */
7810 to_upper_utf8mb4, /* to_upper */
7811 nullptr, /* sort_order */
7812 nullptr, /* uca */
7813 nullptr, /* tab_to_uni */
7814 nullptr, /* tab_from_uni */
7815 &my_unicase_default, /* caseinfo */
7816 nullptr, /* state_map */
7817 nullptr, /* ident_map */
7818 1, /* strxfrm_multiply */
7819 1, /* caseup_multiply */
7820 1, /* casedn_multiply */
7821 1, /* mbminlen */
7822 4, /* mbmaxlen */
7823 1, /* mbmaxlenlen */
7824 0, /* min_sort_char */
7825 0xFFFF, /* max_sort_char */
7826 ' ', /* pad char */
7827 false, /* escape_with_backslash_is_dangerous */
7828 1, /* levels_for_compare */
7829 &my_charset_utf8mb4_handler,
7830 &my_collation_utf8mb4_bin_handler,
7831 PAD_SPACE};
7832